추상 팩토리 패턴은 어떻게 보면, 팩토리 메소드 패턴을 좀 더 캡슐화한 방식이라고 볼 수 있다. 요구 사항 컴퓨터를 생산하는 공장이 있을 때, 마우스, 키보드, 모니터의 제조사로 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에서 구현한다. 요구 사항 게임 아이템과 아이템 생성을 구현해라. 아이..
일정한 프로세스를 가진 요구사항을 템플릿 메소드 패턴을 이용하여 구현할 수 있다. 템플릿은, 모양자 중 동그라미를 그리는데 여러 색의 색연필을 사용하면 하나의 도형에 여러 색의 도형을 만들 수 있는 의미로 말할 수 있다. 알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의하는 패턴이다. 사용 목적 구현하려는 알고리즘이 일정한 프로세스가 있다. (여러 단계로 나눌 수 있다.) 구현하려는 알고리즘이 변경 가능성이 클 때 사용한다. 템플릿 메소드 패턴의 단계 알고리즘을 여러 단계로 나눈다. 나눠진 알고리즘의 단계를 메소드로 선언한다. 알고리즘을 수행할 템플릿 메소드를 만든다. 하위 클래스에 나눠진 메소드들을 구현한다. 기본 설계 알고리즘을 각 operation1, 2..
기계, 기구등을 다른 목적으로 사용하기 위한 부가적인 기구를 말한다. Ex. 우리 나라는 전기를 220v 사용하는데, 110v 사용하는 나라로 여행을 갈 때면 어댑터가 필요하다. 기본 설계 Adaptee라는 알고리즘을 Adapter라는 기능을 통해서 원하는 기능으로 변형하는 것이다. 구체적인 예제 요구사항 두 수에 대한 다음 연산을 수행하는 객체를 만들어라. 수의 두 배의 수를 반환 : twiceOf(Float) : Float 수의 반(1/2)의 수를 반환 : halfOf(Float) : Float 구현 객체 이름은 'Adapter' Math 클래스에서 두 배와 절반을 구하는 함수는 이미 구현되어있다. 요구사항 설계 소스 //Math public class Math { public static doubl..
- Total
- Today
- Yesterday
- 연관관계
- try catch finally
- 이펙티브 자바
- 김영한
- JPA
- 복사 팩토리
- 자바8
- java
- java8
- mustache
- 이펙티브자바
- 팩토리 메소드 패턴
- 생성자
- effectivejava
- 스프링부트
- ifPresent
- 빌더 패턴
- Effective Java
- package-private
- jdk버전
- 점층적 생성 패턴
- @Lazy
- flatMap
- springboot
- 정적팩터리메서드
- 인프런
- junit
- 빈 순환 참조
- Spring
- try with resources
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |