템플릿이란 문자 모양으로 구멍이 뚫려있는 얇은 플라스틱 판을 말한다. 그 구멍을 따라 펜으로 그리면 손으로도 반듯한 문자를 쓸 수 있다. 템플릿의 구멍을 보면 어떤 모양의 문자인지는 알 수 있지만, 실제로 어떤 문자가 될지는 필기구에 의해 결정된다. 템플릿 메서드 패턴이란 이 패턴은 템플릿의 기능을 가진 패턴이다. 상위 클래스쪽에 해당하는 메소드가 정의되어 있고, 그 메서드의 정의 안에는 추상 메서드가 사용되고 있다. 따라서 상위 클래스의 프로그램만 보면 추상 메서드를 어떻게 호출하고 있는지 알 수 있지만, 최종적으로 어떤 처리가 수행되는지는 알 수 없다. 추상 메서드를 실제로 구현하는 것은 하위 클래스이다. 하위 클래스 측에서 메서드를 구현하면 구체적인 처리가 결정된다. 서로 다른 하위 클래스가 서로 ..
말 그대로 이미 제공되어 있는 것을 그대로 사용할 수 없을 때, 필요한 형태로 교환해주는 일을 수행한다. 그렇기 때문에 이 패턴은 Wrapper 패턴이라고도 불린다. Adapter 패턴의 종류 클래스에 의한 Adapter 패턴(상속) 인스턴스에 의한 Adapter 패턴(위임) 상속을 이용한 Adapter 패턴 주어진 문자열을 다음과 같이 표시하는 간단한 프로그램을 만든다. (Hello) *Hello* Banner 클래스 : 이미 제공되어 있는 것 showWithParen : 문자열을 괄호로 묶어서 표시하는 메서드 showWithAster : 문자열 전후로 *를 붙여 표시하는 메서드 Print 인터페이스 : 어댑터를 만드는 역할 printWeak : 문자열을 괄호를 사용하여 표시 printStrong : ..
Java 언어에서 배열 arr의 모든 요소를 표시하기 위해서는 다음과 같이 for 문을 사용한다. for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } for문의 i++같이 i를 하나씩 증가시키면 배열 arr의 요소 전체를 처음부터 차례대로 검색하게 된다. 여기에서 사용되고 있는 변수 i의 기능을 추상화해서 일반화한 것을 디자인 패턴에서는 Iterator 패턴이라 한다. 🐻 무엇인가 많이 모여있는 것들을 순서대로 지정하면서 전체를 검색하는 처리를 실행하기 위한 것 [예제 프로그램] 서가(BookShelf) 안에 책(Book)을 넣고, 그 책의 이름을 차례대로 표시하는 프로그램 Aggregate : 집합체를 나타내는 인터페이스 Itera..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 장기 고객 할인으라든가 신규 고객 할인과 같이 고객의 상태에 따라 특별 할인을 해준다고 가정해보자. 사용 요금 명세서를 생성하는 기능은 아래 코드와 같이 명세서 상세 내역에 특별 할인 기능을 추가할 수 있다. public Bill createBill(Customer customer) { Bill bill = new Bill(); // 사용 내역 추가 bill.addItem(new Item("기본사용요금", price)); bill.addItem(new Item("할부금", somePrice)); // 특별 할인 내역 추가 SpecialDiscount specialDiscount = specialDiscountFactor..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 빌딩의 장비들의 전원을 관리하는 제어 프로그램을 생각해보자. 이 프로그램을 만들기 위해 개별 장비의 전원을 켜고 끄는 기능을 제공하는 인터페이스를 정의하고, 장비 별로 알맞은 콘크리트 클래스를 구현했다. 개별 장비가 아닌 장비들을 하나로 묶어서 관리할 수 있도록 하기 위해 다음과 같이 DeviceGroup 클래스를 추가하였다. 위 타입을 이용해서 장비들의 전원을 제어하는 코드는 다음과 같이 Device 타입과 DeviceList 타입을 구분해서 처리할 것이다. public class PowerController { public void turnOn(Long deviceId) { Device device = findDev..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 비행기를 조정하고 미사일을 발사해서 적을 미사일로 잡는 슈팅 게임을 가정하자. 이런 게임은 흔히 다음과 같은 여러 종류의 적이 출현할 수 있다. 특별 공격으로 작은 분신을 만들어 내는 보스 강력한 미사일을 발사하는 보스 미사일을 발사하는 적기 자폭하는 적기 장애물 또한, 적마다 공격력과 방어력이 달라질 수 있다. 위 같은 적을 구현하기 위해 Boss, SmallFight, Obstacle 클래스 및 하위 클래스를 구성했다. 실제 게임 플레이를 진행하는 Stage 클래스는 몇 단계인지에 따라 서로 다른 적기, 장애물 또는 보스를 생성해야 한다. 이를 처리하기 위해 Stage 클래스의 코드는 다음과 같다. public cl..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 직원 정보, 직원의 이력 정보, 그리고 직원에 대한 평가 정보를 읽어 와 화면에 보여주는 GUI 프로그램을 생각해보자. 데이터를 화면에 출력해 주는 GUIViewer 클래스는 각 데이터를 제공하는 Dao 객체에 직접 접근하는 구조를 갖게 될 것이다. HR팀으로부터 화면뿐만 아니라 XML이나 엑셀로 동일한 데이터를 추출해 달라는 요구사항이 들어왔다. 이를 구현하기 위해 다음과 같이 XMLExporter 클래스와 ExcelExporter 클래스를 구현하였다. 문제점 [1]. 코드 중복 위 구조에서 발생할 수 있는 문제점 중 가장 큰 것은 GUIViewer, XMLExporter, ExcelExporter 사이에서 코드 중복..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 웹 사이트의 상태를 확인해서 응답 속도가 느리거나 연결이 안 되면 모니터링 담당자에게 이메일로 통지해주는 시스템을 만든다고 가정해보자. 상태를 확인하는 StatusChecker 클래스를 다음과 같이 구현할 수 있다. public class StatusChecker { private EmailSender emailSender; public void check() { Status status = loadStatus; if(status.isNotNormal()) { emailSender.sendEmail(status); } } } SMS로 바로 알려주는 기능을 추가하는 요구가 들어온다면 코드는 다음과 같아진다. public ..
- Total
- Today
- Yesterday
- 이펙티브 자바
- Kotlin
- 디자인 패턴
- Olympiad
- BAEKJOON
- 알고리즘
- kotest
- 정규표현식
- 프로그래머스
- 클린 코드
- Spring
- 백준
- 클린 아키텍처
- programmers
- Algorithm
- MSA
- C++
- 디자인패턴
- 이팩티브 자바
- 객체지향
- 코테
- kkoon9
- Effective Java
- AWS
- Spring Boot
- 테라폼
- node.js
- Java
- BOJ
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |