데이터 구조 안에 많은 요소가 저장되어 있고, 그 각 요소에 대해서 무엇인가 ‘처리'해 간다고 가정하자. 이때 그 ‘처리'의 코드는 어디에 써야 할까? 일반적으로 생각하면 데이터 구조를 표시하고 있는 클래스 안에 기술할 것이다. 그러나 만약 그 ‘처리'가 여러 종류라면 새로운 처리가 필요할 때마다 데이터 구조의 클래스를 수정해야 한다. 비지터 패턴은 데이터 구조와 처리를 분리한다. 그리고 데이터 구조 안을 돌아다니는 주체인 ‘방문자'를 나타내는 클래스를 준비해서 그 클래스에게 처리를 위임한다. 그렇다면 새로운 처리를 추가하고 싶을 때에는 새로운 ‘방문자'를 만들면 된다. 그리고 데이터 구조는 문을 두드리고 있는 ‘방문자'를 받아들이면 된다. 방문자가 돌아다니는 데이터 구조로 Composite 패턴의 예제..
케이크에는 여러 종류가 있다. 크림 케이크, 딸기 케이크 등등 다양한 장식(데코레이터)에 따라 케이크의 명칭이 달라진다. 아무것도 장식(데코레이터)하지 않은 케이크를 스펀지 케이크라고 한다. 오브젝트(객체)에도 이런 케이크와 비슷한 경우가 있다. 중심이 되는 객체인 스펀지 케이크 이 스펀지 케이크에 장식이 되는 기능을 하나씩 추가하면 목적이 더욱 뚜렷한 객체가 된다. 데코레이터 패턴은 오브젝트에 장식(데코레이터)을 해 나가는 디자인 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development..
전략 패턴에서는 알고리즘을 구현한 부분을 모두 교환할 수 있다. 전략 패턴은 알고리즘을 빈틈없이 교체해서 같은 문제를 다른 방법으로도 쉽게 해결할 수 있도록 도와주는 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub. github.com 전략 패턴의 등장인물 Strategy(전략)의 역할 - Strategy Strategy는 전략을 이용하기 위한 인터페이스(API)를 결정한다. ConcreteStrategy(구체적인 전략)..
템플릿이란 문자 모양으로 구멍이 뚫려있는 얇은 플라스틱 판을 말한다. 그 구멍을 따라 펜으로 그리면 손으로도 반듯한 문자를 쓸 수 있다. 템플릿의 구멍을 보면 어떤 모양의 문자인지는 알 수 있지만, 실제로 어떤 문자가 될지는 필기구에 의해 결정된다. 템플릿 메서드 패턴이란 이 패턴은 템플릿의 기능을 가진 패턴이다. 상위 클래스쪽에 해당하는 메소드가 정의되어 있고, 그 메서드의 정의 안에는 추상 메서드가 사용되고 있다. 따라서 상위 클래스의 프로그램만 보면 추상 메서드를 어떻게 호출하고 있는지 알 수 있지만, 최종적으로 어떤 처리가 수행되는지는 알 수 없다. 추상 메서드를 실제로 구현하는 것은 하위 클래스이다. 하위 클래스 측에서 메서드를 구현하면 구체적인 처리가 결정된다. 서로 다른 하위 클래스가 서로 ..
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..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 비행기를 조정하고 미사일을 발사해서 적을 미사일로 잡는 슈팅 게임을 가정하자. 이런 게임은 흔히 다음과 같은 여러 종류의 적이 출현할 수 있다. 특별 공격으로 작은 분신을 만들어 내는 보스 강력한 미사일을 발사하는 보스 미사일을 발사하는 적기 자폭하는 적기 장애물 또한, 적마다 공격력과 방어력이 달라질 수 있다. 위 같은 적을 구현하기 위해 Boss, SmallFight, Obstacle 클래스 및 하위 클래스를 구성했다. 실제 게임 플레이를 진행하는 Stage 클래스는 몇 단계인지에 따라 서로 다른 적기, 장애물 또는 보스를 생성해야 한다. 이를 처리하기 위해 Stage 클래스의 코드는 다음과 같다. public cl..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 직원 정보, 직원의 이력 정보, 그리고 직원에 대한 평가 정보를 읽어 와 화면에 보여주는 GUI 프로그램을 생각해보자. 데이터를 화면에 출력해 주는 GUIViewer 클래스는 각 데이터를 제공하는 Dao 객체에 직접 접근하는 구조를 갖게 될 것이다. HR팀으로부터 화면뿐만 아니라 XML이나 엑셀로 동일한 데이터를 추출해 달라는 요구사항이 들어왔다. 이를 구현하기 위해 다음과 같이 XMLExporter 클래스와 ExcelExporter 클래스를 구현하였다. 문제점 [1]. 코드 중복 위 구조에서 발생할 수 있는 문제점 중 가장 큰 것은 GUIViewer, XMLExporter, ExcelExporter 사이에서 코드 중복..
- Total
- Today
- Yesterday
- 디자인 패턴
- 클린 아키텍처
- BOJ
- Kotlin
- kkoon9
- programmers
- 디자인패턴
- MSA
- kotest
- 이펙티브 자바
- node.js
- Effective Java
- 알고리즘
- Olympiad
- Spring Boot
- 프로그래머스
- AWS
- 이팩티브 자바
- Spring
- 정규표현식
- Algorithm
- 객체지향
- 백준
- 클린 코드
- 테라폼
- Java
- C++
- 코테
- BAEKJOON
- 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 | 31 |