본문 바로가기

전체 글52

여섯 번째, 혹서기에 혹한기 어느덧 뜨거운 8월이 끝나가고 9월이 곧 온다.  날씨가 더워지기 시작하던 때 백수로 지내다가 다시 회사를 다니기 시작했다. 쉬는 기간이 예상보다 길었고, 이는 내가 원하던 게 분명 아니었다. 생각보다 많은 어려움이 있었다. 특히 처우가 많이 문제였는데 내가 다시 일을 시작하니 그때서야 슬슬 소문들이 퍼지기 시작했다. 내가 그 소문을 진작 들었으면 적당히 타협하고 회사를 들어갔을 텐데 말이다. 어느 정도 고집을 부렸고, 결과적으로는 예상보다 오랜 기간 백수로 지냈다.  확실히 정직원, 프리랜서 등 개발자의 몸 값은 생각 이상으로 낮아져 있다.  뜨거운 여름이 시작되는데 나는 혹한기를 겪은 것이다. 물론 지금도 혹한기이고 매일매일 뉴스에는 '어느 회사가 문을 닫는다.', '어느 회사는 희망퇴직을 시작했다... 2024. 8. 29.
다섯 번째, 디자인 패턴 정리 끝 디자인 패턴 정리가 끝났다.물론 모든 디자인 패턴을 내 머릿속에 다시 넣지는 못 했다.10년을 넘게 개발자로 살아왔지만 이런 부분이 참 어려운 것 같다.문제를 해결함에 있어 디자인 패턴이 미치는 영향이 적은 것은 아니지만 이것을 외워서 하는 건 아니고 실제로 겪어가면서 해야 하는데 예제 코드를 짠다고 해서 그게 온전히 내 것이 되고 외워지지는 않는다. 보면 알겠는데... 비슷한 사례로 나는 여러 언어를 하다 보면 for문도 헛갈리고 if문도 헛갈린다.디자인 패턴을 물어보면 따박따박 대답 잘하는 사람들을 보면 참 신기하다... 일단 이번에 정리하면서 내가 디자인 패턴을 잊거나 헛갈릴 때 다시 읽게 되면 이해가 바로 되도록 최대한 작성했는데 도움이 될지는 모르겠다. 그리고 누군가에게는 도움이 될 수 있는 내.. 2024. 6. 3.
방문자(Visitor) - 행동 패턴(Behavioral Patterns) 방문자 패턴은 개체의 구조와 개체가 수행하는 작업을 분리하는 디자인 패턴이다. 개체의 구조는 변경하지 않고, 새로운 작업을 개체에 추가할 수 있다. 방문자 패턴은 주로 개체 구조가 자주 변경되지만, 수행해야할 작업이 자주 변경된는 경우에 유용하다.  주요 개념 부터 살펴보자. 1. Visitor(방문자) : 개체 구조를 방문하여 수행할 작업을 정의하는 인터페이스이다.2. ConcreteVisitor(구체적인 방문자) : Visitor 인터페이스를 구현하며, 각 개체에 대해 수행할 작업을 정의한다.3. Element(요소) : Visitor를 받아들이는 인터페이스이다. 이 인터페이스는 accept 메서드를 정의한다.4. ConcreteElement(구체적인 요소) : Element 인터페이스를 구현하며 a.. 2024. 5. 25.
템플릿 메서드(Template Method) - 행동 패턴(Behavioral Patterns) 템플릿 메서드 패턴은 알고리즘의 구조를 정의하고, 알고리즘의 일부 단계를 서브 클래스에서 구현할 수 있도록 한다. 알고리즘의 뼈대는 상위 클래스에서 제공하고 세부 구현은 하위 클래스에서 제공한다. 주요 개념 부터 알아보자. 1. Abstract Class (추상 클래스) : 알고리즘의 뼈대를 정의하는 템플릿 메서드를 포함한다. 알고리즘의 각 단계를 정의하며, 일부 단계는 추상 메서드로 선언하여 서브 클래스에서 구현하도록 한다.2. Concrete Class (구체 클래스) : 추상 클래스에서 정의된 추상 메서드를 구현하여 알고리즘의 각 단계를 정의한다.  예시 소스코드를 살펴보자. 요리를 하는 과정을 템플릿 메서드 패턴으로 구현해본다. 요리는 재료준비, 요리, 설거지 이런 단계가 가장 큰 틀이다 각 세부.. 2024. 5. 25.
전략(Strategy) - 행동 패턴(Behavioral Patterns) 전략 패턴은 알고리즘을 정의하고 각각 캡슐화하여 상호 교체가 가능하도록 만드는 패턴이다. 특정 작업을 수행하는 여러 알고리즘이 있을때 런타임에 사용할 알고리즘을 성택할 수 있다. 핵심은 알고리즘을 사용하는 클라이언트와 알고리즘 자체를 분리하여 알고리즘을 독립적으로 변경할 수 있게 하는것이다. 주요 개념 부터 살펴보자.  1. Strategy (전략) : 알고리즘을 정의하는 공통 인터페이스이다.2. ConcreteStrategy (구체적인 전략) : 전략 인터페이스를 구현하며, 실제 알고리즘을 정의한다.3. Context (문맥) : Strategy 개체를 사용하는 클래스이다. Context는 전략 개체를 가지고 있으며, 이를 통해 알고리즘을 실행한다.  정렬 알고리즘을 전략 패턴으로 구현해본 소스코드를 .. 2024. 5. 25.
상태(State) - 행동 패턴(Behavioral Patterns) 상태 패턴은 개체가 내부 상태에 따라 행동을 변경하도록 하는 디자인 패턴이다. 개체의 상태를 개체로 캡슐화하여 상태 전환을 관리할 수 있다. 상태에 따라 다른 행동을 수행해야하는 경우에 유용한 패턴이다. 주요 개념부터 살펴보자. 1. Context(문맥) : 상태를 가지며, 현재 상태에 따라 행동을 수행한다. 상태 개체를 관리하고 상태 전환을 처리한다.2. State (상태) : 상태에 따른 행동을 정의하는 인터페이스이다.3. ConcreteState (구체적인 상태) : State 인터페이스를 구현하며, 상태에 따른 구체적인 행동을 정의한다. 예제 소스코드를 살펴보자.  문서(Document)에 대한 상태 관리이다. 초안 상태, 검토 중 상태, 승인 상태로 전환되어야 하고 각 상태에 따라 다른 행동을 .. 2024. 5. 25.
옵저버(Observer) - 행동 패턴(Behavioral Patterns) 옵저버 패턴은 개체의 상태 변화를 관찰하고, 그 변화가 발생했을 때 자동으로 통지(Notify)를 받아 처리할 수 있도록 하는 패턴이다. 주로 이벤트 기반 시스템에서 사용된다. 주요 개념부터 살펴보자 1. Subject (주제) : 상태를 가지고 있으며, 상태 변화를 옵서버들에게 알린다. 옵서버를 등록하고 제거하는 메서드를 제공한다. 2. Observer (옵저버) : 주제의 상태 변화를 관찰하고, 상태 변화가 발생했을 때 특정 행동을 수행한다. 3. ConcreteSubect (구체적인 주제 : 상태를 저장하고, 상태가 변경될 때 옵서버들에게 알린다.4. ConcreteObserver (구체적인 옵서버) : 주제의 상태 변화를 관찰하고, 상태가 변경될 때 행동을 수행한다. 날씨 모니터링 시스템 소스코드.. 2024. 5. 25.
메멘토(Memento) - 행동 패턴(Behavioral Patterns) 메멘토 패턴은 개체의 상태를 저장하고 나중에 복원할 수 있도록 하는 디자인 패턴이다. 상태를 외부에 저장하지 않고 개체 자체에서만 관리하면서 특정 시점의 상태로 되돌릴 수 있다. 주로 실행취소와 같은 기능을 구현할때 사용된다. 주요 개념 부터 살펴보자. 1. Originator : 상태를 겆장하고 복원할 개체이다. 현재 상태를 캡슐화하여 메멘토 개체를 생성하고, 메멘토 개체를 사용하여 상태를 복원한다.2. Memento : Originator 개체의 상태를 저장하는 개체 이다. 상태 정보를 캡슐화하여 외부에 노출하지 않는다.3. Caretaker : 메멘토 개체를 관리하며,메멘토 개체를 저장하고 필요할 때 Originator 개체의 상태를 복원한다. 텍스트 편집기에서 텍스트를 입력하고 실행 취소할 수 있.. 2024. 5. 25.
중재자(Mediator) - 행동 패턴(Behavioral Patterns) 중재자 패턴은 개체들이 직접 통신하지 않고 중재자 개체를 통해 통신하도록하는 디자인패턴이다. 개체간의 상호작용을 캡슐화 하여 개체간의 결합도를 줄이고, 개체간의 상호작용을 한 곳에서 관리할 수 있도록 한다. 주요 개념 부터 살펴보자 1. Mediator (중재자) : 개체 간의 상호 작용을 조정하는 인터페이스를 정의한다.2. ConcreteMediator (구체적인 중재자) : Mediator 인터페이스를 구현하며, 개체간의 상호작용을 실제로 조정한다.3. Colleague (동료개체) : 상호작용하는 개체들로, 중재자와 상호작용한다.4. ConcreteColleague (구체적인 동료 개체) : Colleague 인터페이스를 구현하며, 중재자를 통해 다른 개체들과 통신한다. 중재자 패턴이 가장 많이 쓰.. 2024. 5. 25.
반복자(Iterator) - 행동 패턴(Behavioral Patterns) 반복자 패턴은 컬렉션(집합체)의 내부 구조를 노출하지 않고도 그 안에 들어있는 요소들을 순회(traverse)할 수 있는 방법을 제공하는 디자인 패턴이다. 이 패턴을 컬렉션을 순회하는 로직을 컬렉션 개체 외부에 정의할 수 있으므로, 컬렉션의 내부 구조가 변경되더라도 순회 로직을 변경하지 않아도 된다. 주요 개념 부터 살펴보자 1. Iterator 인터페이스 : 컬렉션 요소를 순회하는 메서드를 정의한다.2. ConcreteIterator 클래스 : Iterator 인터페이스를 구현하며, 컬렉션 요소를 순회하는 기능을 제공한다.3. Aggregate 인터페이스 :Iterator 개체를 반환하는 메서드를 정의한다.4. ConcreteAggregate 클래스 : Aggregate 인터페이스를 구현하며 컬렉션을 .. 2024. 5. 25.
인터프리터(Interpreter) - 행동 패턴(Behavioral Patterns) 인터프리터 패턴은 주어진 언어의 문법을 나타내는 클래스를 이용해 문장을 해석하고 실해앟는 디자인 패턴이다. 주로 특정 도메인 언어 (DSL, Domain-Specific Language)의 구문 해석에 사용된다. 인터프리터 패턴은 언어의 각 기호를 클래스 하나로 표현하고, 이를 조합하여 문장을 해석하는 구조를 제공한다.  주요 개념 부터 알아보자 1. AbstractExpression (추상 표현) : 모든 표현식의 공통 인터페이스를 정의한다.2. TerminalExpression (종료 표현) : 문법의 기본 요소를 정의하며, 해석의 최종 단계를 나타낸다.3. NonTerminalExpression (비종료 표현) : 문법의 조합 규칙을 정의하며, 다른 표현식을 결합한다.4. Context (문맥) :.. 2024. 5. 25.
커맨드(Command) - 행동 패턴(Behavioral Patterns) 커맨드 패턴은 요청을 개체의 형태로 캡슐화 하여 요청에 필요한 모든 정보를 포함시킨다. 이를 통해 큐에 저장하거나 로그로 남기거나 실행 취소 할 수 있는 기능을 제공 할 수 있다. 커맨드 패턴을 사용하면 실행될 기능을 매개변수화 할 수 있으며 요청을 개체로 캡슐화 함으로써 실행할 작업을 독립적으로 관리할 수 있다.  주요 개념 부터 알아보자 1. Command 인터페이스 : 실행할 작업을 정의한다. 2. ConcreateCommand 클래스 : Command 인터페이스를 구현하고, 실제 실행할 작업을 정의 한다.3. Invoker 클래스 : Command 개체를 실행한다.4. Receiver 클래스 : 실제로 작업을 수행하는 개체이다.5. Client 클래스 : Command 개체를 생성하고, Invok.. 2024. 5. 25.