1. 추상 팩토리 패턴이란 무엇인가? 구체적으로 어떤 클래스의 인스턴스를 사용하는 감춘 상태로 서로 연관된 여러 객체를 생성하는 인터페이스를 제공한다. 구성요소 1) AbstractFactory - AbstractProduct 객체를 생성하는 인터페이스를 선언한다. 2) ConcreteFactory - AbstractProduct를 구현하는 구상 객체를 생성하기 위한 행위를 구현한다. 3) AbstractProduct - 한 종류의 Product 객체의 인터페이스를 선언한다. 4) ConcreteProduct - 담당한 ConcreteProduct에 의해 생성되는 객체를 정의함. - AbstractProduct 인터페이스를 구현함. 5) Client - AbstractFactory / AbstractPr..
1. 팩토리 메서드 패턴이란? 팩토리 메서드 패턴에서는 객체를 생성하기 위한 인터체이스를 정의한다. 어떤 클래스의 인스턴스를 만들지는 어느 서브클래스에서 결정하게 만든다. 팩토리 메서드 패턴을 이요하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다. -> 구체적으로 어떤 것 (객체의 생성)을 만들지는 서브 클래스가 정한다. 구성요소 1) Product - 팩토리 메서드가 생성할 객체의 인터페이스를 정의한다. 2) Creator - 팩토리 메서드를 정의하고, 이 팩토리 메서드는 Product 타입의 객체를 리턴한다. - 구현은 ConcreteCreator에서 하지만, 디폴트 팩토리 메서드를 구현할 수도 있다. 3) ConcreteProduct - Product 인터페이스를 구현한다. 4) C..
1. 데코레이터 패턴이란? 데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. 구성요소 1. Component - 동적으로 기능을 추가 받을 객체의 인터페이스 2. Decorator - Component 객체에 대한 참조를 가진다. - Component의 인터페이스 타입을 구현한다. (같은 타입을 가진다) 3. ConcreteComponent - 기능이 추가 받을 수는 객체 4. ConcreteDecorator - Component에 기능을 더한다. 기본이 되는 디자인 원칙 OCP(Open-Closed Principle): 클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어..
1. 옵저버 패턴이란? 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 1:N 의존성을 정의한다. 구성요소 1. Subject - Observer 목록을 가지고 있다. Observer의 수에는 제한이 없음. - Observer를 추가/제거 하는 인터페이스 제공 2. Observer - 업데이트 인터페이스를 제공. (이 업데이트 인터페이스는 해당되는 Subject에 변화가 있을 때 갱신하는 것을 의미) 3. ConcreteSubject - ConcreteObserver 객체들이 필요로 하는 정보를 가지고 있다. - 상태가 변하면 가지고 있는 ConcreteObserver들에게 공지함. 4. ConcreteObserver - ConcreteSubje..
1. 스트래티지 패턴이란? 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 구성요소 1. Context - ConcreteStrategy 참조 -> Setter - Strategy 객체와 소통 역할 2. Strategy - ConcreteStrategy의 generic 인터페이스 역할 - Context에서 사용할 함수 3. ConcreteStrategy - 세부 행동 구현 기본이 되는 디자인 원칙 1. Encapsulation: 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리한다. 2. Interface: 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 3...
1. 탄생배경 연결리스트에 대한 첫 언급은 1955-1956년에 개발된 IPL이라는 언어의 기본 자료구조로 등장한다. 이 IPL은 복잡한 수식을 증명하는 용도로 개발이 되었는데 간단히 설명하자면 이 언어에서 사용되는 변수들의 계층을 나누기 위해서 사용된 것으로 보인다. 어떤 변수들은 그 스코프가 전역적이고 또 어떤 특정 변수들은 스코프가 내부적으로 이루어져 있는데 이 각 값들을 어떤 변수의 이름으로 접근할 수 있도록 연결 리스트가 사용되었다고 한다. 2. 연결 리스트란 무엇인가? 정의: 한 줄로 연결되어 있는 방식으로 어떤 데이터 덩어리(이하 노드Node)를 저장할 때 그 다음 순서의 자료가 있는 위치를 데이터에 포함시키는 방식으로 자료를 저장한다. 즉 리스트의 순서가 메모리에서의 실제 저장 위치에서는 ..
1. 탄생 배경 배열은 가장 오래된 자료구조 중 하나로써 특정 탄생 시기나 배경에 대한 정확한 기록을 찾기 어려웠다. 추정컨대 배열이라는 개념을 어느 시점에 누가 처음으로 만들어내서 지금까지 쓰고 있다기 보다는 이전부터 일렬로 데이터를 저장해서 읽고 쓰는 것이 매우 기초적인 행위이기 때문에 배경을 찾는 의미가 없는 건 아닐까 싶다. 저장장치가 생기기 전의 컴퓨터에서 사용한 테이프 (magnetic tape나 구멍 뚫린 종이 테이프)도 아주 넓은 의미에서 배열의 범주 안에 들어간다고도 할 수 있지 않을까? 그만큼 일렬로 데이터를 저장하는 방식은 매우 보편적인 아이디어 같다. 다만 direct access가 가능한 배열은 컴퓨터 하드웨어에 내장 메모리가 등장하기 시작하면서 우리가 현재 아는 배열의 개념이 정..
1. 탄생배경 (정렬 알고리즘들의 탄생 배경은 사실 특별한 것이 별로 없다. 자료구조 같은 경우 처음 의도와 현재 상용되는 방식과 다른 경우가 가끔 있지만 정렬 알고리즘들은 말 그대로 "정렬"을 위해 생겨난 것들로 탄생배경에 대한 자세한 이해가 공부에 큰 영향을 주지는 않을 것 같다. 참고 정도만 해도 충분할 것이라 생각한다.) 퀵소트는 1961년 영국의 컴퓨터과학자 Tony Hoare에 의해 고안되었다. 당시 기계번역 프로젝트를 하고 있었는데 입력받은 러시아어 문장을 자동으로 번역하는 과정이었다. 당시 전산화(?)된 사전은 자기 테이프 (magnetic tape)에 알파벳순으로 저장된 형태였는데 효율적인 사전 검색을 위해 입력받은 문장의 단어들을 알파벳 순으로 정렬하는 과정이 필요했다. 일차적으로 개발..
- Total
- Today
- Yesterday
- Java #JIT #JVM
- 카카오코테
- WORE
- behavior parameterization
- decorator
- 2020 KAKAO
- 코테
- 스프링 컨테이너
- 카카오 코테
- IOC
- 프로그래밍 모델
- 카카오
- 디자인패턴
- 2021
- trie 소스코드
- jvm
- 모던 자바 인 액션
- nginx 내부
- digital tree
- 카카오 인턴
- Kakao Blind
- PatternSyntaxException
- 스프링
- KAKAO 2021
- WORA
- 2019 Kakao Blind
- Java
- okhttp3
- Java #GC #가비지콜렉터 #Garbage Collector
- 신규 아이디 추천
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |