컴포지트 패턴을 통해 트리 구조를 구현할 수 있다. 컴포지트란 하나 이상의 유사한 객체를 구성으로 설계된 객체로 모두 유사한 기능을 나타낸다. 이를 통해 객체 그룹을 조작하는 것처럼 단일 객체를 조작할 수 있다. 컴포지트 패턴이란? 컴포지트 패턴은 클라이언트가 복합 객체나 단일 객체를 동일하게 취급하는 것을 목적으로 한다. 여기서 컴포지트의 의도는 트리 구조로 작성하여 전체-부분 관계를 표현하는 것이다. 컴포지트 패턴은 언제 사용하는가? 복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우, 전체-부분 관계로 정의할 수 있다. 기본 설계 Component : 모든 표현할 요소들의 추상적인 인터페이스이다. Leaf : Component 인터페이스를 구현하고 구현체 클래스를 나타낸다. (단일 객체에 해당된..
어댑터 패턴과 브릿지 패턴을 연결하여 이해한다. 기능 부분과 구현 부분을 분리하는 것이 이번 패턴의 키워드이다. 브릿지 패턴은 잘 사용되지 않고, 어댑터 패턴과 매우 비슷하다는 것을 먼저 알고 들어가자. 먼저 브릿지 패턴을 사용하지 않은 소스를 확인해보자 요구사항은 입력한 단어를 모스부호 형태로 출력하는 것이다. public class MorseCode { public void dot() { System.out.print("·"); } public void dash() { System.out.print("-"); } public void space() { System.out.print(" "); } } public class PrintMorseCode extends MorseCode { //blue pu..
추상 팩토리 패턴은 어떻게 보면, 팩토리 메소드 패턴을 좀 더 캡슐화한 방식이라고 볼 수 있다. 요구 사항 컴퓨터를 생산하는 공장이 있을 때, 마우스, 키보드, 모니터의 제조사로 Samsung과 LG가 있다고 가정해보자. 그럼 컴퓨터를 생산할 때의 부품들은 모두 Samsung이나 LG로 만들어질 것이다. 그럼 먼저, 팩토리 메소드 패턴을 사용하여 컴퓨터 생산하는 로직을 구현해보자. 위 설계를 발판으로 소스를 구현해보자. 키보드 관련 클래스 public interface Keyboard { } public class LGKeyboard implements Keyboard { public LGKeyboard(){ System.out.println("LG 키보드 생성"); } } public class Sam..
총 두 가지 방식을 보면서 빌더 패턴을 공부해보자. 1. 빌더 패턴(1) : 객체의 구현을 서브 클래스에게 넘겨줘 인스턴스를 생성하는 패턴 2. 빌더 패턴(2) : 다른 객체의 도움으로 인스턴스를 생성하는 패턴(체인 방식) 빌더 패턴 (1) 복잡한 단계가 필요한 인스턴스 생성을 빌더 패턴을 통해서 구현가능하다. 복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브 클래스에게 넘겨주는 패턴 기본 설계 예제 설계 소스 확인 //Factory public class ComputerFactory { private BluePrint print; public void setBlueprint(BluePrint blueprint) { this.print = blueprint; } public void make() { pr..
얕은 복사와 깊은 복사 얕은 복사 하나의 객체의 주소값을 복사하는 경우를 말한다. public static void main(String[] args) { Cat navi = new Cat("navi"); Cat yo = navi; yo.chgName("yo"); System.out.println(navi.getName()); System.out.println(yo.getName()); } //결과 yo yo 깊은 복사 하나의 객체의 값들을 복사하는 경우를 말한다. public class Cat implements Cloneable{ ... public Cat copy() throws CloneNotSupportedException { Cat ret = (Cat)this.clone(); return re..
프로토타입 패턴을 활용하면, 복잡한 인스턴스를 복사할 수 있다. 프로토타입은 생산 비용이 높은 인스턴스를 복사하여 쉽게 생성할 수 있도록 하는 패턴이다. 인스턴스 생산 비용이 높은 경우 종류가 너무 많아 클래스로 정리하기 어려운 경우 클래스로부터 인스턴스 생성이 어려운 경우 기본 설계 요구 사항 일러스트레이터와 같은 그림 그리기 툴을 개발중이다. 어떤 모양(shape)을 그릴 수 있도록 하고 복사 붙여넣기 기능을 구현해라. 소스 //Shape public interface Shape extends Cloneable{ Shape copy(); } //Circle public class Circle implements Shape{ private int x,y,r; public Circle(int x, int..
싱글톤이란, 하나의 인스턴스만 생성하도록 구현하는 것을 말한다. 기본적인 설계 요구사항 개발 중 시스템에서 스피커에 접근할 수 있는 클래스를 만들어달라. 싱글톤 객체 정의 public class SystemSpeaker { static private SystemSpeaker instance; private int volume; private SystemSpeaker() { volume = 5; } //하나의 인스턴스만을 만들기 위한 메소드 public static SystemSpeaker getInstance() { if(null == instance) { return instance = new SystemSpeaker(); } return instance; } public int getVolume() ..
팩토리 메소드 패턴 팩토리 메소드 패턴에서 템플릿 메소드 패턴의 사용됨을 알 수 있다. 팩토리 메소드 패턴에서의 구조와 구현의 분리를 이해하고 구조와 구현의 분리 장점을 알 수 있다. 템플릿 메소드 패턴 간략히 다시보기 어떤 알고리즘이 여러 단계의 step으로 나누어질 수 있다면, 여러 step으로 메소드를 선언하고 하위 클래스에서 해당 메소드의 구현을 하는 패턴이다. 기본 설계 Product를 생성하는 DefaultProduct가 있고, DefaultProduct에서 사용하려는 Product들을 구현하게 된다. 템플릿 메소드 패턴을 사용하는데, Creator가 여러 step으로 나누어져 있을 시 DefaultProductCreator에서 구현한다. 요구 사항 게임 아이템과 아이템 생성을 구현해라. 아이..
- Total
- Today
- Yesterday
- jdk버전
- 인프런
- 복사 팩토리
- 연관관계
- 김영한
- try with resources
- java
- flatMap
- 스프링부트
- 빈 순환 참조
- 자바8
- junit
- 빌더 패턴
- 정적팩터리메서드
- 이펙티브자바
- ifPresent
- 이펙티브 자바
- mustache
- try catch finally
- java8
- springboot
- JPA
- effectivejava
- @Lazy
- 생성자
- Effective Java
- 팩토리 메소드 패턴
- 점층적 생성 패턴
- Spring
- package-private
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |