본문 바로가기

728x90

전체 글

(54)
[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/setterJava 에서는 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 stati..
[Baekjoon] 2292번 벌집 B2 <Short> 2292번 - 벌집 1. 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. Input 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. Output 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다. 2. 사용 알고리즘 수학 (Math) 3. 풀이 해당 풀이는 가능한 한 코드의 길이를 줄이고자 하는..
[Design Pattern] 경량 (Flyweight) 패턴 1. 개요경량 디자인 패턴 (Flyweight Design Pattern)은 내부 상태(Intrinsic)와 외부 상태(Extrinsic)를 구분하는 패턴이다.1.1. 설명내부 상태(Intrinsic): 객체가 독립적으로 가지고 있는 고유한 상태 - Flyweight외부 상태(Extrinsic): 여러 객체가 공유하는 상태2. 상황많은 수의 유사한 객체를 생성해야 할 때내부 상태와 외부 상태를 명확히 구분해야 할 때3. 다이어그램3.1. 설명FlyweightConcreteFlyweight 의 인터페이스 ConcreteFlyweight공유될 객체의 내부 상태를 저장하고, 외부 상태를 공유한다.operation(String context) 메소드를 구현하여 외부 상태에 따른 동작을 수행한다. Flyweigh..
[Design Pattern] 중재자 (Mediator) 패턴 1. 개요 중재자 디자인 패턴 (Mediator Design Pattern)은 객체 간 복잡한 상호작용 부분을 따로 함축한 객체를 만드는 패턴이다. 2. 조건 여러 객체 간의 상호작용이 매우 복잡할 때 3. 다이어그램 3.1. 설명 Mediator 객체들 사이의 상호작용을 중재, 조정하는 인터페이스를 정의한다. 다른 객체들과 통신하기 위한 인터페이스를 제공한다. 객체들 간의 결합도를 낮추고, 객체들이 직접적으로 통신하지 않도록 한다. ConcreteMediator Mediator 인터페이스를 구현하여 객체들의 상호작용을 조정한다. 객체들 간의 통신을 관리하고 중재한다. 다른 객체들과의 통신을 위해 객체들 간의 관계를 알고 있어야 한다. Colleague Mediator와 통신하는 객체를 나타낸다. 다른 ..

728x90