본문 바로가기

728x90

분류 전체보기

(49)
[Algorithm] 순차 탐색 (Sequential Search) 1. 개요 순차 탐색 (Sequential Search) 은 선형 탐색 (Linear Search) 그 자체이며, 배열과 같은 선형 구조에 대해 탐색하는 방식을 의미한다. 자료 구조 전체에 대한 탐색이 이루어지므로 완전 탐색 (Brute Force) 의 한 종류라고 할 수 있다. 2. 의의 순차 탐색 알고리즘은 구현이 용이하다. 항상 효율적이라고는 할 수 없지만, 쉽게 구현할 수 있다는 점에서 의의가 있다. 또한, 선형 구조의 정렬 여부와 관계 없이 사용 가능하다는 장점이 있다. 3. 조건 순차 탐색 역시 완전 탐색 이므로 완전 탐색의 조건을 따른다. 4. 구현 순차 탐색 알고리즘은 선형 자료 구조를 그 길이 만큼 모두 탐색하기 때문에 보통 반복문을 사용하여 구현된다. 다음의 예시를 보자. 5. 예시) ..
[Algorithm] 탐색 (Search) 1. 개요탐색 (Search) 알고리즘은 한 개 이상의 자료들 사이에서 특정 자료를 색출하는데 사용하는 방식을 의미한다. 자료가 저장된 형식에 따라 쓰이는 탐색 알고리즘 은 달라진다. 이 포스팅에서는 탐색 알고리즘 의 종류와, 각각의 알고리즘이 어떠한 상황에서 사용되는지에 대해 살펴보고자 한다.2. 종류다음 모두 탐색 알고리즘 이라고 할 수 있다. 위 탐색 알고리즘을 선택하여 해당 포스팅으로 이동할 수 있다.
[Python] 논리 연산에 대한 고찰 1. 개요대부분의 언어는 같은 형식의 데이터끼리만 논리 연산을 할 수 있다. 하지만 Python 은 형식이 달라도 논리 연산이 가능하다는 특징이 있다. 이 포스팅에서는 Python 의 논리 연산자 (Logical Operator) and, or, not 이 어떻게 동작하는지에 대해 자세히 살펴보고자 한다.2. 비 Python 의 논리 연산대부분의 언어는 논리 연산자로 &&, ||, ! 를 사용한다.&& : 논리곱 (and)|| : 논리합 (or)! : 부정 (not)위 세 연산자(Operator)와 편의상 A (왼쪽) 와 B (오른쪽) 의 피연산자(Operand)를 사용한 다음과 같은 식의 연산값에 대해 살펴보도록 하자.A && BA || B!A기본적으로 위 연산의 결과값은 bool 형식을 나타내며, 다..
[Dart] 널 세이프티 (Null Safety) 1. 개요 Dart 에서는 2.0 버전부터 null 값에 대하여 안전한 대응이 가능하도록 하는 Null Safety 를 도입하였다. 이번 포스팅에서는 이것이 적용된 이유와 이와 관련된 여러 가지 문법에 대해 알아보고자 한다. 2. 적용 이유 Null Safety는 예상치 못한 null 값에 대한 오류에 대한 검출을 런타임 오류가 아닌 컴파일 오류 차원에서 가능하도록 할 수 있다. 다음의 예시에서 확인할 수 있다. bool isEmpty(String str) => str.length == 0; void main() { isEmpty(null); } [출처: Dart 공식 문서] 위 코드는 NoSuchMethodError 를 발생시킨다. Null 클래스에는 length 라는 getter 가 존재하지 않기 때..
[Design Pattern] 명령 (Command) 패턴 1. 개요 명령 디자인 패턴 (Command Design Pattern)은 명령(Command)을 객체로 만들고 실행 작업을 명령한 객체(Invoke)와 실제 작업을 수행하는 객체(Receiver) 사이의 의존성을 제거하고, 명령의 매개 변수를 조작하거나 취소, 재실행하는 등의 기능을 하는 패턴이다. 2. 상황 실행되는 작업을 객체로 캡슐화하고자 할 때 작업을 취소하거나 다시 실행해야 할 때 작업의 실행 순서를 관리해야 할 때 다양한 작업을 동적으로 구성해야 할 때 실행되는 작업과 호출하는 객체 간의 의존성을 줄여야 할 때 3. 다이어그램 3.1. 설명 Command 명령 추상 클래스이다. Receiver 필드를 가진다. execute() 추상 메소드를 정의한다. ConcreteCommand Comman..
[Flutter] Duration 값 간결히 나타내기 1. 개요 Flutter 에서 기간 혹은 시간을 나타내기 위해서는 Duration 을 사용한다. 사용 예시는 다음과 같다. 1밀리초: Duration(milliseconds: 1) 50분: Duration(minutes: 50) 1년: Duration(days: 365) 1.1. 개선 필요성 위와 같은 쓰임은 개발하는데 상당히 불편했다. Future.delayed() 나, Timer.periodic() 함수 등과 같이 쓰이기라도 한다면, 코드길이가 너무 길어지고 가독성이 많이 떨어졌다. 또한 const 를 붙이라는 IDE 의 말을 따른다면 다음과 같은 코드가 완성된다. await Future.delayed(const Duration(milliseconds: 500), () { // ... }); Time..
[Dart] 익스텐션 (Extension) 1. 개요 Dart 에는 Extension 문법이 존재한다. 어떠한 수정 불가능한 클래스에 대하여 메소드를 추가/수정 하고 싶을 경우 Extension 을 사용할 수 있다. 2. 사용 extension [extension 이름] on [타입] {} 와 같이 사용된다. class A { void methodA() {} } 위 예시와 같이 클래스 A 는 methodA() 를 가지고 있다. 이때, methodB() 도 추가하고 싶지만, 클래스 A 를 수정할 수 없다면 Extension 을 사용 가능하다. extension AExtension on A { void methodB() {} } 위와 같이 나타내면 다음과 같은 사용이 가능해진다. A().methodB(); 예시를 살펴보자. 3. 예시 Dart 에서는..
[Dart] get / set 1. 개요 Dart 에서는 getter 를 나타낼 때 get, setter 를 나타낼 때 set 이라는 키워드를 사용한다. 각각이 어떠한 때에 사용되는지 살펴보자. 2. Java 의 getter/setter Java 에서는 private 한 속성을 외부에서 접근하거나 변경하고 싶을 때 보통 getter 와 setter 를 사용한다. 2.1. 예시 public class Student { private String id; public Student(String id) { this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } } public class Main { public stat..

728x90