![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dssQIp/btrx06tGCqi/Z5NFgLS4DXT1RPRtSNZkiK/img.jpg)
책임 떠넘기기라는 단어는 부정적인 의미가 강하지만 꼭 필요한 경우도 있다. 어떤 요청이 발생했을 때 그 요청을 처리할 객체를 직접 결정할 수 없는 경우, 복수의 객체를 사슬(chain)처럼 연결해 두면, 그 객체의 사슬을 차례로 돌아다니면서 목적한 객체를 결정하는 방법을 생각할 수 있다. 이 패턴을 사용하면 ‘요청하는 쪽'과 ‘처리하는 쪽'의 연결을 유연하게 해서 각 객체를 부품으로 독립시킬 수 있다. 상황에 따라서 요청을 처리할 객체가 변하는 프로그램에도 대응할 수 있다. 다음 링크는 책임 떠넘기기 패턴의 예제 코드다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contrib..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/z5L9M/btrxTO8iGjs/EiNt4bBoKzwRh1UtX4Q9MK/img.jpg)
데이터 구조 안에 많은 요소가 저장되어 있고, 그 각 요소에 대해서 무엇인가 ‘처리'해 간다고 가정하자. 이때 그 ‘처리'의 코드는 어디에 써야 할까? 일반적으로 생각하면 데이터 구조를 표시하고 있는 클래스 안에 기술할 것이다. 그러나 만약 그 ‘처리'가 여러 종류라면 새로운 처리가 필요할 때마다 데이터 구조의 클래스를 수정해야 한다. 비지터 패턴은 데이터 구조와 처리를 분리한다. 그리고 데이터 구조 안을 돌아다니는 주체인 ‘방문자'를 나타내는 클래스를 준비해서 그 클래스에게 처리를 위임한다. 그렇다면 새로운 처리를 추가하고 싶을 때에는 새로운 ‘방문자'를 만들면 된다. 그리고 데이터 구조는 문을 두드리고 있는 ‘방문자'를 받아들이면 된다. 방문자가 돌아다니는 데이터 구조로 Composite 패턴의 예제..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bdWplB/btrw6fY9Frq/zJkgkvLMFi4rzPC7pk539K/img.jpg)
케이크에는 여러 종류가 있다. 크림 케이크, 딸기 케이크 등등 다양한 장식(데코레이터)에 따라 케이크의 명칭이 달라진다. 아무것도 장식(데코레이터)하지 않은 케이크를 스펀지 케이크라고 한다. 오브젝트(객체)에도 이런 케이크와 비슷한 경우가 있다. 중심이 되는 객체인 스펀지 케이크 이 스펀지 케이크에 장식이 되는 기능을 하나씩 추가하면 목적이 더욱 뚜렷한 객체가 된다. 데코레이터 패턴은 오브젝트에 장식(데코레이터)을 해 나가는 디자인 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/tIgQy/btrwJDlGtSM/GGz2BpiEoS1ab2mkB5ZUS0/img.jpg)
디렉터리(폴더) 안에는 파일 또는 다른 디렉터리가 존재한다. 디렉터리와 파일은 서로 다르지만 ‘디렉터리 안에 넣을 수 있는 것'이라는 의미로 합쳐서 ‘디렉터리 엔트리’로 불린다. 컴포지트 패턴은 그릇(디렉터리)과 내용물(파일)을 동일시해서 재귀적인 구조를 만들기 위한 디자인 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub. github.com Composite 패턴의 등장인물 Leaf(나뭇잎)의 역할 - File Leaf..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bFMIFI/btrwzcDhK5W/9RlSRLfeGmvi1J1OqwnvWK/img.jpg)
전략 패턴에서는 알고리즘을 구현한 부분을 모두 교환할 수 있다. 전략 패턴은 알고리즘을 빈틈없이 교체해서 같은 문제를 다른 방법으로도 쉽게 해결할 수 있도록 도와주는 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub. github.com 전략 패턴의 등장인물 Strategy(전략)의 역할 - Strategy Strategy는 전략을 이용하기 위한 인터페이스(API)를 결정한다. ConcreteStrategy(구체적인 전략)..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/BbHT4/btrv2E7qrC0/7gI75baEC0StNvQ6G417vk/img.jpg)
보통 new 키워드를 사용해서 클래스 이름을 지정하여 인스턴스를 생성한다. 그러나 클래스 이름을 지정하지 않고 인스턴스를 생성할 때도 있다. 다음과 같은 경우에는 클래스로부터가 아닌 인스턴스를 복사해서 새로운 인스턴스를 만든다. [1]. 종류가 너무 많아 클래스로 정리되지 않는 경우 취급하는 오브젝트의 종류가 너무 많아서 각각을 별도의 클래스로 만들어 다수의 소스 파일로 작성하는 경우 [2]. 클래스로부터 인스턴스 생성이 어려운 경우 생성하고 싶은 인스턴스가 복잡한 작업을 거쳐 만들어지기 때문에 클래스로부터 만들기가 어려운 경우 ex) 그래픽 에디터에서 사용자가 마우스를 조작해서 만든 도형을 나타내는 인스턴스가 있다고 가정해보자. 사용자의 조작으로 인스턴스를 프로그래밍해서 만드는 것은 곤란하다. 사용자의..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bN7UpP/btrvKpB7b7d/0e3lRQzkhUkSvZresVqvUK/img.jpg)
프로그램을 실행할 때 보통은 많은 인스턴스가 생성된다. 예를 들어 문자열을 표시하는 java.lang.String 클래스의 인스턴스는 문자열 1개에 대해서 1개가 생성된다. 그렇기 때문에 문자열이 1,000개 등장하는 프로그램이라면 1,000개의 인스턴스가 만들어진다. 그러나, ‘클래스의 인스턴스가 단 하나만 필요'한 경우가 있다. 그것은 시스템 안에서 1개 밖에 존재하지 않는 것을 프로그램으로 표현하고 싶을 때가 있다. ex) 컴퓨터 자체를 표현한 클래스, 현재의 시스템 설정을 표현한 클래스, 윈도우 시스템을 표현한 클래스 물론, 주의를 기울여 프로그래밍해서 new MyClass()가 1회만 실행되도록 작성하면 MyClass의 인스턴스는 1개만 생성된다. 그러나 ‘프로그래머가 주의를 기울여서 1개만 생..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bd3pmS/btrvEHwtK0O/xxHXziFcBsjxfLN0j8wRuk/img.jpg)
템플릿 메서드에서는 상위 클래스에서 처리의 골격을 만들고, 하위 클래스에서 구체적인 처리의 내용을 만들었다. 템플릿 메서드 패턴을 인스턴스 생성의 장면에 적용한 것이 팩토리 메서드 패턴이다. 팩토리 메서드 패턴이란 factory는 ‘공장'이라는 의미다. 인스턴스를 생성하는 공장을 템플릿 메서드 패턴으로 구성한 것이 팩토리 메서드 패턴이 된다. 팩토리 메서드 패턴에서는 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않는다. 따라서 인스턴스 생성을 위한 골격(framework)과 실제의 인스턴스 생성의 클래스를 분리해서 생각할 수 있다. 신분증명서 카드(ID 카드)를 만드는 예제 코드 Product 추상 클래스 : (framework 패키지 내 존재) use() ..
- Total
- Today
- Yesterday
- 클린 아키텍처
- Olympiad
- Effective Java
- Java
- 코테
- 디자인패턴
- 프로그래머스
- 백준
- 이펙티브 자바
- programmers
- C++
- 이팩티브 자바
- Algorithm
- kotest
- 객체지향
- 테라폼
- kkoon9
- 클린 코드
- BOJ
- 디자인 패턴
- MSA
- JPA
- 정규표현식
- BAEKJOON
- Kotlin
- node.js
- Spring
- Spring Boot
- AWS
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |