일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IntelliJ
- Spring Batch
- php
- AWS
- linux
- laravel
- ReactJS
- Gradle
- jenkins
- db
- jsp
- devops
- Spring Boot
- java
- javascript
- springboot
- Spring
- JVM
- elasticsearch
- it
- Oracle
- ubuntu
- 맛집
- 요리
- MySQL
- tool
- Web Server
- redis
- Design Patterns
- Git
- Today
- Total
목록Design Patterns (20)
아무거나
데코레이터 패턴(Decorator Pattern) 동적으로 책임 추가가 필요할 때 사용한다. Component: 실질적인 인스턴스를 컨트롤하는 역할 즉, decorator와 Component를을 컨트롤 하는 역할이다. (method 부분이 책임 부분) ConcreteComponent: Component의 실질적인 인스턴스의 부분이며, 책임의 주체의 역할 즉, Component가 컨트롤하는 객체 Decorator: Component와 concrete decorator를 동일시 하도록 해주는 역할 즉, Decorator은 Component가 될 수 있고, Component들을 가지고 있는 모양세를 가지고 있다고 생각하면 된다. ConcreteDecorator: 실질적인 장식 인스턴스 및 정의이며 추가된 책임..
컴포지트 패턴(Composite Pattern) 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴 Component: 설계(인터페이스) Leaf: 상속받은 내용물 Composite: Leaf를 담는 Composite 즉, Component가 만들어야할 공통적인 것들을 가지고있다. 컴포지트 패턴은 일반적으로 파일시스템에 자주 사용한다. 컴포지트 패턴 예시 - 1 [요구사항] 파일 시스템을 만들자. Component를 만들자. [Component.java] package com.bkjeon.composite; abstract public class Component { private String name; public Component(String name) { this.name = na..
브릿지 패턴(Bridge Pattern) 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 해주는 패턴이다. 즉, 기능 부분과 구현 부분을 분리 먼저 브릿지 패턴을 사용하지 않고 모스부호를 출력하는 기능을 구현해보자. [MorseCode.java] package com.bkjeon.bridge; public class MorseCode { public void dot() { System.out.print("."); } public void dash() { System.out.print("-"); } public void space() { System.out.print(" "); } } [PrintMorseCode.java] package com.bkjeon.bridge; public class..
추상 팩토리 패턴(Abstract Factory Pattern) 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있다. 제품군을 만들 때를 예로 들어보자. 추상 팩토리 패턴을 사용하면 클라이언트에서 추상 인터페이스를 통하여 일련의 제품들을 공급받을 수 있다. 실제로 어떤 제품이 생산되는지도 전혀 알 필요가 없다. 따라서 클라이언트와 팩토리에서 생산되는 제품을 분리시킬 수 있다. AbstractFactory: 모든 구상 팩토리에서 구현해야 하는 인터페이스이다. 제품을 생산하기 위한 일련의 메소드들이 정의되어 있다. ConcreteFactory1~2: 구상 팩토리에서는 서로 다른 제품군을 구현한다. 클라이언트에서 제품이 필요하면 이 팩토리 가운데 적당한걸 선..
빌더 패턴(Builder Pattern) 개념을 보기 앞서 빌더 패턴 2개를 소개하였는데 첫번째 빌더 패턴은 책에서 나용 내용이고 실질적으로 두번째 빌더 패턴을 많이 사용하므로 두번째를 숙지하는것이 좋다. 빌더 패턴이란 복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브 클래스에게 넘겨주는 패턴 빌더 패턴 예시 - 1 ( 팩토리를 사용한 빌더 패턴 - 책 기준 ) 먼저 복잡한 단계를 거쳐야 생성되는 객체를 Computer라는 객체로 생성해보자. [Computer.java] package com.bkjeon.builder; public class Computer { private String cpu; private String ram; private String storage; public Computer(..
프로토타입 패턴(Prototype Pattern) 복잡한 인스턴스를 복사할 수 있다. 즉, 생산 비용이 높은 인스턴스를 복사를 통해서 쉽게 생성할 수 있도록 하는 패턴 인스턴스 생산 비용이 높은 경우 종류가 너무 많아서 클래스로 정리되지 않는 경우 클래스로부터 인스턴스 생성이 어려운 경우 프로토 타입 패턴 예시 - 1 [요구사항] 일러스트레이터와 같은 그림 그리기 툴을 개발중이다. 어떤 모양(Shape) 그릴 수 있또록 하고 복사 붙여넣기 기능을 구현하자. 모양에 대한 함수를 만들자. [Shape.java] package com.bkjeon.prototype; public class Shape implements Cloneable { private String id; public void setId(St..
싱글톤 패턴(Singleton Pattern) 하나의 인스턴스만 생성하도록 구현 즉, 인스턴스를 하나만 생성해야할 객체를 위한 패턴 싱글톤 패턴 예시 - 1 [요구사항] 개발중인 시스템에서 스피커에 접근할 수 있는 클래스를 만들자. 만약 스피커에 접근할 수 있는 클래스가 하나 이상 예를 들어 100개라고 생각하면 스피커의 볼륨을 올린다면 100개의 클래스를 모두 찾아다니면서 올려줘야 하므로 개발의 복잡도도 올라가고 리소스도 많이 잡아먹는다 그러므로 싱글톤을 사용해야 한다. 스피커에 대한 싱글톤 패턴을 구현하자. [SystemSpeaker.java] package com.bkjeon.singleton; public class SystemSpeaker { // 외부에 접근 안되고 하나만 하기 위해서 stat..
팩토리 메소드 패턴(Factory Method Pattern) 팩토리 메소드 패턴에서 템플릿 메소드 패턴의 사용됨을 알 수 있다. 팩토리 메소드 패턴에서의 구조와 구현의 분리를 이해하고 구조와 구현의 분리의 장점을 안다. 이번 내용은 먼저 코드를 작성하고 구조를 알아야 위의 본문을 이해하기 쉽다. 팩토리 메소드 패턴 예시 - 1 [요구사항] 게임 아이템과 아이템 생성을 구현 아이템을 생성하기 전에 데이터 베이스에서 아이템 정보를 요청 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터 베이스에 아이템 생성 정보를 저장 아이템을 생성하는 주체를 ItemCreator로 이름 정의 아이템은 item 이라는 interface로 다룰 수 있게 한다. item은 use 함수를 기본 함수로 갖고 있다. ..
스트래티지 패턴(Strategy Pattern) 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서 서로 교환 가능하도록 하는 패턴 스트래티지 패턴 예시 [요구사항] 신작 게임에서 캐릭터와 무기를 구현해보자. 무기는 두 가지 종류가 있다. 칼 검 먼저 무기 인터페이스를 생성한다. [Weapon.java] package com.bkjeon.strategy; public interface Weapon { public void attack(); } 그 다음 칼과 검의 클래스를 생성한다. [Knife.java] package com.bkjeon.strategy; public class Knife implements Weapon { @Override public void attack() { System...
어댑터 패턴(Adapter Pattern) 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 어댑터 패턴은 이름대로 어댑터처럼 사용되는 패턴이다. 220V 를 사용하는 한국에서 쓰던 기기들을, 어댑터를 사용하면 110V 를 쓰는곳에 가서도 그대로 쓸 수 있다. 이처럼, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해주는 패턴이 어댑터 패턴이라고 할 수 있겠다. 이를 위해 어댑터 역할을 하는 클래스를 새로 만들어야 한다. 기존에 있는 시스템에 새로운 써드파티 라이브러리가 추가된다던지, 레거시 인터페이스를 새로운 인터페이스로 교체하는 경우에 코드의 재사..