
프로그램을 실행할 때 보통은 많은 인스턴스가 생성된다. 예를 들어 문자열을 표시하는 java.lang.String 클래스의 인스턴스는 문자열 1개에 대해서 1개가 생성된다. 그렇기 때문에 문자열이 1,000개 등장하는 프로그램이라면 1,000개의 인스턴스가 만들어진다. 그러나, ‘클래스의 인스턴스가 단 하나만 필요'한 경우가 있다. 그것은 시스템 안에서 1개 밖에 존재하지 않는 것을 프로그램으로 표현하고 싶을 때가 있다. ex) 컴퓨터 자체를 표현한 클래스, 현재의 시스템 설정을 표현한 클래스, 윈도우 시스템을 표현한 클래스 물론, 주의를 기울여 프로그래밍해서 new MyClass()가 1회만 실행되도록 작성하면 MyClass의 인스턴스는 1개만 생성된다. 그러나 ‘프로그래머가 주의를 기울여서 1개만 생..

템플릿 메서드에서는 상위 클래스에서 처리의 골격을 만들고, 하위 클래스에서 구체적인 처리의 내용을 만들었다. 템플릿 메서드 패턴을 인스턴스 생성의 장면에 적용한 것이 팩토리 메서드 패턴이다. 팩토리 메서드 패턴이란 factory는 ‘공장'이라는 의미다. 인스턴스를 생성하는 공장을 템플릿 메서드 패턴으로 구성한 것이 팩토리 메서드 패턴이 된다. 팩토리 메서드 패턴에서는 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않는다. 따라서 인스턴스 생성을 위한 골격(framework)과 실제의 인스턴스 생성의 클래스를 분리해서 생각할 수 있다. 신분증명서 카드(ID 카드)를 만드는 예제 코드 Product 추상 클래스 : (framework 패키지 내 존재) use() ..

템플릿이란 문자 모양으로 구멍이 뚫려있는 얇은 플라스틱 판을 말한다. 그 구멍을 따라 펜으로 그리면 손으로도 반듯한 문자를 쓸 수 있다. 템플릿의 구멍을 보면 어떤 모양의 문자인지는 알 수 있지만, 실제로 어떤 문자가 될지는 필기구에 의해 결정된다. 템플릿 메서드 패턴이란 이 패턴은 템플릿의 기능을 가진 패턴이다. 상위 클래스쪽에 해당하는 메소드가 정의되어 있고, 그 메서드의 정의 안에는 추상 메서드가 사용되고 있다. 따라서 상위 클래스의 프로그램만 보면 추상 메서드를 어떻게 호출하고 있는지 알 수 있지만, 최종적으로 어떤 처리가 수행되는지는 알 수 없다. 추상 메서드를 실제로 구현하는 것은 하위 클래스이다. 하위 클래스 측에서 메서드를 구현하면 구체적인 처리가 결정된다. 서로 다른 하위 클래스가 서로 ..

말 그대로 이미 제공되어 있는 것을 그대로 사용할 수 없을 때, 필요한 형태로 교환해주는 일을 수행한다. 그렇기 때문에 이 패턴은 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..
- Total
- Today
- Yesterday
- 테라폼
- 코테
- 이팩티브 자바
- 백준
- 클린 아키텍처
- node.js
- C++
- BOJ
- MSA
- kotest
- AWS
- Spring Boot
- Spring
- programmers
- Algorithm
- Olympiad
- 알고리즘
- Java
- 이펙티브 자바
- kkoon9
- 클린 코드
- Effective Java
- BAEKJOON
- JPA
- 디자인패턴
- 객체지향
- 정규표현식
- 디자인 패턴
- Kotlin
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |