CS/디자인패턴
-
[구조 패턴] BridgeCS/디자인패턴 2021. 6. 3. 17:55
해당 게시글은 "JAVA DESIGN PATTERNS - REUSABLE SOLUTIONS TO COMMON PROBLEMS"의 내용을 기반으로 정리한 것입니다. 1. Bridge(브리지) 패턴 Bridge 패턴은 To Decouple an Abstaction from its Implementation (추상과 구상의 분리) 라는 목적이 있는 패턴입니다. 객체지향 프로그래밍에서 여러 클래스에서 공통적인 속성 혹은 메서드의 제공을 위한 방법으로 상속을 사용하곤 합니다. 이때, 상속을 두 가지 관점에서 바라볼 수 있습니다. 구현 관점: 부모 클래스에서 정의한 기능을 자식 클래스에 맞게 재정의(재구현) 기능 관점: 자식 클래스에서 사용할 메소드를 추가 이러한 관점에서 클래스를 상속받는 것은 해당 클래스를 상속..
-
[구조 패턴] AdapterCS/디자인패턴 2021. 5. 26. 17:00
1. Adapter 란? 해외 전자제품을 국내에서 사용하기 위해서 일명 "돼지코"라 불리는 변환 플러그를 사용해야 하는 경우가 있다. 국가마다 콘센트의 형태, 전압 등이 다르기 때문이다. 마찬가지로 서로 맞지 않는 인터페이스를 갖는 클래스가 있을때, 이 둘의 인터페이스를 맞춰주기 위해서 사용하는 패턴이 Adapter(어댑터) 패턴이다. 2. Structure 일반적인 구조는 아래와 같다. Client에서 필요한 인터페이스를 정의한 Target이 있고, 이 Target을 구현한 Adapter가 Adaptee를 통해서 각 함수를 기능을 제공해주는 형식이다. 이와 유사하게 아래와 같은 구조를 생각해볼 수도 있다. 단, 이와 같은 구조를 위해서는 언어에서 다중 상속을 지원해야하기 때문에 C++같은 언어에서만 만..
-
[생성 패턴] SingletonCS/디자인패턴 2021. 5. 25. 19:24
1. Singleton 이란? 시스템에 존재하는 딱 하나의 인스턴스 싱글톤을 사용하는 주목적은 단 한개의 인스턴스를 보증 하거나 자원 공유의 편의를 제공하기 위함이다. 2. Structure 싱글톤의 구조는 매우 간단하다. 클래스 내부에 private 한 static 변수를 사용하여 자기 자신을 저장하도록 구현. 다른 클래스에서 이 클래스의 인스턴스를 얻고자 할 때는 getInstance() 메서드를 통해서만 얻을 수 있도록 함. 3. Example 이 구조를 토대로 만들 수 있는 하나의 코드 예시를 살펴보면 다음과 같다. public class SingletonExample { private static SingletonExample instance = new SingletonExample(); pri..
-
[생성 패턴] BuilderCS/디자인패턴 2021. 5. 21. 21:35
Builder Pattern? Builder(빌더) 패턴이란, 레고 블록을 조립하는 것처럼 객체를 생성하자. 레고 블록을 어떻게 조립하는지에 따라 최종 모양이 결정되는 것처럼, 객체도 생성자를 통해서 한 번에 만들지 말고 필요한 부분들만 조립할 수 있게 하자. 왜 이런 패턴이 필요한가를 생각해기 위해 다음의 코드를 살펴보자. 피자의 정보(크기, 치즈 유무, 토핑 종류)를 담고 있는 Pizza 클래스가 있다. public class Pizza { public Pizza(int size) { ... } public Pizza(int size, boolean cheese) { ... } public Pizza(int size, boolean cheese, boolean pepperoni) { ... } // ..
-
[생성 패턴] PrototypeCS/디자인패턴 2021. 5. 20. 17:51
생성 패턴 중 Prototype Pattern(프로토타입 패턴)에 대해서 알아보자. 1. Prototype Pattern 프로토타입의 핵심 아이디어 기존에 존재하는 인스턴스를 복사해서 새 인스턴스를 만들자 예를 들어서, A라는 사람이 디자인 패턴에 대해 잘 정리한 파일(ex_ A.hwp)을 갖고 있다고 해보자. 이 파일을 A의 친구인 B와 C가 달라고 한다. 이때 A는 원본 파일을 주게 되면, B와 C에 의해서 A.hwp가 훼손될 가능성이 있기 때문에 새로운 파일을 만들어서 주려고 할 것이다. 그렇다면 아래의 두 가지 방법이 있다. 새 한글 문서를 키고 A.hwp의 내용을 타이핑하여 새 파일을 만들고, 이를 B와 C에게 준다. A.hwp를 Ctrl C, V를 해서 새 파일을 만들고, 이를 B와 C에게 준..
-
[생성 패턴] Abstract Factory MethodCS/디자인패턴 2021. 5. 19. 22:29
추상 팩토리 메소드. 이름부터 왠지 패토리 메소드와 비슷한 기능을 수행할 것만 같다. 추상 팩토리 메소드 패턴을 정리하자면 아래와 같다. 팩토리를 생성하는 팩토리 Structure 설명 팩토리 메소드 패턴의 설명에서 사용했던 예제인 Parser를 다시 한번 생각해보자. DisplayService가 하나의 Parser 인터페이스를 갖는 다양한 Concrete 클래스(ResponseParser, ErrorParser, FeedbackParser)를 팩토리 메소드를 통해 생성한 예제였다. 이 상황에서 한 발짝 더 나아가보자. ResponseParser가 A_ResponseParser, B_ResponseParser로 나누어진다면, ResponseDisplayService는 어떻게 될까. 다음과 같은 모습이 될..
-
[생성 패턴] Factory MethodCS/디자인패턴 2021. 5. 18. 21:49
클래스 인스턴스의 생성과 사용 부분을 분리하여 관리하자. 팩토리 메소드의 기본 구조는 아래와 같습니다. UML 다이어그램을 봐도 실제로 어떻게 동작하는 건지 잘 이해가 어려운데요.... 저만 그런가요..? 그래서 예제를 살펴보면서 어떤 구조이고, 어떤 장점이 있는지 살펴보려고 합니다. 아래와 같이 동일한 Interface를 가진 세 가지 Parser(Response, Error, Feedback Parser)를 만들었다고 가정해봅시다. public interface Parser { public String parse(); } public class ResponseParser implements Parser { @Override public String parse() { return "Response Me..
-
[디자인 패턴] 개요CS/디자인패턴 2021. 5. 17. 16:59
개발자가 자신이 작성한 코드에 바라는 건 다음 3가지 정도가 될 수 있다. 유연성(Flexible): 작은 노력으로 코드의 변화를 줄 수 있으면 좋겠다. 재사용성(Re-Usable): 다른 곳에 가져다 쓸 때, 별 탈없이 쓸 수 있으면 좋겠다. 유지보수성(Maintainable): 코드를 수정할 때, 다른 부분에 영향이 없이 쉽게 수정할 수 있으면 좋겠다. 이 요소과 더불어 가독성과 같은 추가적인 요소까지 모두 고려하면서 코드를 작성하는 것은 엄청난 노력이 필요할 것이다. 그래서!! 과거 선배 개발자들이 열심히 고민하면서 만들어낸 구조를 일반화시켜서 동일한 성격의 다양한 상황에 적용될 수 있도록 한 것이 바로 "디자인 패턴"이다. 1. 객체 지향 설계 원칙 _ SOLID원칙 먼저, 좋은 객체 지향 코드란..