목록코딩 일기장/JAVA 디자인 패턴 (7)
와챠의 우당탕탕 코딩 일기장
Composite Pattern Composite 패턴은 디렉터리와 파일의 관계처럼 재귀적인 구조를 가진 패턴이다. (Composite 패턴의 가장 기본적인 예는 파일과 디렉터리의 관계이다.) 재귀적인 구조란 디렉터리가 그릇 역할도 하고(디렉터리(그릇) 안에 파일(내용물)이 들어갈 수 있음), 내용물 역할도 할 수 있는 것을 말한다(디렉터리(그릇) 안에 디렉터리(내용물)를 넣을 수 있음). 하지만 저 예제는 흔하므로 나는 목표를 만드는 예제를 만들어 보았다. 목표에는 추상적인 목표, 구체적인 목표가 있고, 추상적인 목표는 추상적인 목표와 구체적인 목표를 포함할 수 있게 했다. 파일과 디렉터리로 설명하면 추상적인 목표는 디렉터리고, 구체적인 목표는 파일인 셈이다. DetailedGoal 클래스 = 구체적인..
Strategy Pattern Strategy 패턴은 알고리즘을 쉽게 교체할 수 있는 패턴이다. 예제로는 플레이어가 레벨 1일 때는 쉬운 공격을 하고, 레벨 2일때는 어려운 공격을 하는 코드를 짜 봤다. Strategy 인터페이스 = 레벨에 따라 다른 공격을 구현하게 함 Level 1 클래스 = 레벨 1의 공격인 쉬운 알고리즘 구현 Level 2 클래스 = 레벨 2의 공격인 어려운 알고리즘 구현 (※원래는 attack에 알고리즘이 들어가야 하는데 간단하게 표현하고자 생략) Player 클래스 = 플레이어를 나타내는 클래스 장점 Player 클래스에 구체적인 Strategy 클래스(Level 1, Level 2)는 보이지 않는다. Strategy의 일이 필요할 때엔 필드인 strategy에게 위임(◇) 하..
Singleton Pattern Singleton 패턴은 인스턴스가 하나만 생성되는 패턴이다. 예제로는 하나뿐인 닌텐도를 언니랑 동생이 같이 사용하는 내용이다. 요즘 닌텐도 스위치는 하나에 여러 계정이 있다는데 이 예제에서는... 언니와 동생이 하나의 계정을 같이 키우고 있다고 치자. 언니를 갖고 싶은 내 바람과 닌텐도를 갖고 싶은 내 바람을 섞어봤다. - : private + : public 밑줄 : static Singleton 패턴의 장점 (인스턴스를 하나만 생성하므로) 인스턴스가 상호간 영향을 주어 생기는 '예상치 못한 버그'를 생각하지 않고 프로그래밍할 수 있다. Singleton 패턴이 뭐하는 패턴인지 책 예제만 보고는 잘 이해가 되지 않았는데, 네이버 지식백과에 적힌 예를 보고 바로 이해가 ..
Factory Method Pattern Factory Method 패턴은 상위 클래스에서 추상적인 공장과 추상적인 제품을 만들고(공장과 제품이 갖춰야 할 틀을 만들고), 하위 클래스에서 구체적인 공장과 구체적인 제품을 만드는 패턴이다. 그리고 이 패턴은 디자인 패턴 3번째에서 배운 Template Method 패턴의 응용이다. (제품 생산의 큰 흐름을 결정하는 Factory Method) 예제로는 추상적인 공장을 상속받아 과자 공장 클래스를 만들고, 추상적인 제품을 상속받아 행운 번호를 갖고 있는 과자 클래스를 만들어 보았다. framework 패키지 = 추상적인 틀을 결정하는 클래스들의 모음 Factory 클래스 = 공장이 갖추어야 할 틀을 가진 추상 클래스 create 메소드 = 제품 생산의 큰 흐..
Template Method Pattern Template Method 패턴은 하위 클래스에서 구체적으로 처리하도록 하는 패턴이다. template(견본)의 뜻처럼 부모 클래스에서 큰 형식을 지정해주면, 자식 클래스가 그 큰 형식에 맞추어 구체적인 일을 하도록 하는 패턴이다. 이력서처럼 형식이 정해져 있는 것에 내가 그 칸을 하나하나 구체적으로 채우는 느낌이다. 예제로는 레시피 형식에 맞추어 쿠키 레시피와 파이 레시피를 작성하는 코드를 짜보았다. AbstractRecipe = 레시피의 큰 흐름을 구성하는 Template Method를 가진 추상 클래스 printRecipe 메서드 = ready, bake, decoration를 이용해 레시피의 큰 흐름을 구성(Template Method) 자식이 @Ove..
Adapter Pattern Adapter 패턴은 말 그대로 어댑터 역할을 하는 패턴이다. 원래 있는 것을 필요한 형태로 수정해서 재활용하는 역할을 한다. (내가 가지고 있는 것과 내가 원하는 것 사이를 연결해주는 패턴이다.) 아래와 같은 느낌이다. 내가 가지고 있는 것 내가 원하는 것 아래 예제는 내가 갖고 있는 5핀 충전기에 어댑터를 껴서 내가 원하는 C타입 충전기로 만들어 이북 리더기를 충전하는 예제이다. 쉽게 표현하면 아래와 같다. 5핀 충전기 C타입 충전기 --> 이북 리더기 Adapter 패턴에는 총 2가지 종류가 있다. 하나는 상속을 이용한 Adapter 패턴이고, 하나는 위임을 이용한 Adapter 패턴이다. 1, 상속을 이용한 Adapter 패턴 Main = 이북 리더기를 충전하는 나 C..
Iterator Pattern Iterator 패턴은 for 문의 i 같은 느낌이다. 여러 원소들이 들어있는 배열에서 한 원소씩 (통일된 방법으로) 차례대로 선택하는 데에 사용한다. 아래 예제는 독서실에 들어간 사람의 이름, 번호, 입장 시간을 차례대로 표시하는 프로그램이다. 예제로 뭘 할까 생각하는데 코로나라서 이런 명부를 적는 것이 생각나서 만들어보았다. Aggregate = 독서실 집합체 Iterator = 하나씩 차례로 선택하는 Iterator의 집합체 StuydingRoom = 독서실 StudyingRoomIterator = 독서실에 있는 사람들을 한명씩 차례로 선택하는 Iterator Person = 사람 여기서 주목해야할 점은 Main 클래스의 이 부분이다. 이 부분은 아래처럼 for 문으로..