1. 프록시 패턴이란? 특정 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴. 구성요소 1) Proxy - 프록시 객체가 RealSubject에 대해 접근할 수 있도록 참조를 갖는다. - RealSubject와 Subject 인터페이스가 동일하다면 프록시는 Subject에 대한 참조를 할 수 있다. - RealSubject에 대한 접근을 제어하며, 생성/참조에 대한 권한을 가질 수 있다. 2) Subject - RealSubject와 Proxy의 공통 인터페이스이며, RealSubject가 필요한 곳에 Proxy를 통해 사용할 수 있도록 한다. 3) RealSubject - 프록시가 대신하는 실제 객체를 정의한다. 프록시의 종류 1) Remote Proxy: 요..
1. 스테이트 패턴이란? 스테이트 패턴을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 구성요소 Context - 클라이언트가 필요한 인터페이스르 정의한다. - 현재 상태를 나타내는 ConcreteState 서브클래스를 유지한다. State - 특정 상태에 해당되는 기능들이 정의된 인터페이스를 선언하고 있다. ConcreteState - 각 서브클래스는 해당되는 상태의 기능들을 구현한다. 2. 동기 장점 - 상태에 특화된 행동들을 분리하고, 새로운 행동을 추가하더라도 다른 행동에 영향을 주지 않는다. - 코드 복잡도를 줄일 수 있다. - 상태의 전환이 명시적으로 변한다. 단점 - 구조의 복잡도가 증가한다. 3. 구현..
1. 컴포지트 패턴이란 컴포지트 패턴을 이용하면 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있다. 이 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체를 똑같은 방법으로 다룰 수 있다. 구성요소 Composite라는 단어 자체가 복합적인, 합성적인이라는 뜻이다. 어떤 객체 구조가 여러 계층으로 구성되어 있는 복잡한 구조일 때 적용하는 패턴인데, 전형적인 컴포지트 객체는 이런 식으로 생겼다. Component - 복합적인 구조를 지닌 객체 (Composite object) 들의 공통 인터페이스 - 모든 객체들이 가지고 있는 default한 기능을 여기서 구현할 수 있다. - 자녀 컴포넌트에 접근하거나 관리하는 인터페이스를 선언한다. - (선택사항) 필..
1. 이터레이터 패턴이란? 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해 주는 방법을 제공해준다. 구성요소 1) Iterator - 아이템에 접근할 수 있도록 해주는 인터페이스를 정의한다. 2) ConcreteIterator - Iterator 인터페이스를 구현한다. - 집합체 내부를 접근할 때 현재 위치를 기억한다. 3) Aggregate - Iterator 객체를 생성하기 위한 인터페이스를 제공한다. 4) ConcreteAggregate - Iterator 생성 인터페이스를 구현하고 해당하는 ConcreteIterator 인스턴스를 반환한다. 2. 동기 이터레이터 패턴의 핵심은 집합체(리스트, 맵, 등등)의 각 아이템에 대한 접근과 순회하는 책임을 ..
1. 템플릿 메소드 패턴이란 템플릿 메소드는 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스의 특정 단계를 재정의 할 수 있다. 구성요소 1) AbstractClass - 추상화된 기본 함수들을 정의한다 (나중에 ConcreteClass가 구현할). - 알고리즘의 뼈대를 정의하는 템플릿 메소드를 구현한다. 이 템플릿 메소드는 추상 메소드로 정의한 기본 함수들을 호출할 수 있으며 다른 내/외부 함수들을 호출할 수도 있다. 2) ConcreteClass - 상속한 AbstractClass의 기본 함수들을 구체적으로 구현한다. 적용된 디자인원칙 일부 구체적인 로직은 하위 ConcreteClass..
1. 어댑터 패턴? 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 구조 Target - Client가 사용할 특정 도메인에 한정되는 인터페이스 Client - Target와 연관된 객체들을 사용한다. Adaptee - 변환이 필요한 인터페이스 Adapter - Adaptee 인터페이스를 Target 인터페이스의 규격에 맞춘다. 간단하게 말하자면: Adaptee를 Target의 형식에 끼워 맞추는 역할을 Adapter가 담당하는 것이다. - 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴 - 클라이언트가 사용하는 인터페이스를 따르지 않는 기존 코드를..
1. 커맨드 패턴이란? 요구사항을 객체로 캡슐화하여, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수 있다. 요청 내역을 큐에 저장하거나, 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능하다. 구조 Command - 기능을 수행하기 위한 인터페이스이다. ConcreteCommand - Receiver 객체와 액션끼리의 연결을 수행한다. - execute()를 구현한다. -> 알맞는 Receiver 객체의 메소드를 호출한다. Client - ConcreteCommand 객체를 생성하여 그에 따른 Receiver를 연결한다. Invoker - Command에게 작업을 수행하도록 요청한다. Receiver - 실제로 작업을 처리하는 주체. 2. 동기 - 어떤 요청을 보내게 될 것인지, 누구에게..
1. 싱글턴 패턴이란? 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 한다. 구성요소 1) Singleton - getSingleData() : 다른 클라이언트들이 그 유일한 객체에 접근할 수 있도록 하는 인스턴스 함수를 제공한다. - 유일 객체를 생성하는 역할을 자기 자신이 할 수 있도록 구현할 수도 있다. 2. 동기 장점: 1) 유일 객체에 대한 통제된 접근성 - Singleton 객체가 자신의 객체를 캡슐화하기 때문에, 클라이언트들이 언제, 어떻게 접근하는 지에 대해 매우 엄격한 통제를 한다. 2) 깔끔하게 쓸 수 있는 네임스페이스 - global variable에 대한 개선책이다. 네임스페이스에 global variable들이 마구잡이로 생성되고 삭제되는 ..
- Total
- Today
- Yesterday
- 2021
- trie 소스코드
- Kakao Blind
- decorator
- WORA
- okhttp3
- 카카오
- digital tree
- behavior parameterization
- 프로그래밍 모델
- KAKAO 2021
- 카카오 인턴
- Java
- 카카오 코테
- 신규 아이디 추천
- IOC
- 2020 KAKAO
- 카카오코테
- 스프링
- nginx 내부
- 코테
- jvm
- 스프링 컨테이너
- 디자인패턴
- Java #JIT #JVM
- WORE
- 모던 자바 인 액션
- 2019 Kakao Blind
- Java #GC #가비지콜렉터 #Garbage Collector
- PatternSyntaxException
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |