Computer Science/Design Pattern
[Design Pattern] 생성 패턴 - 팩토리 메소드 패턴(Factory Method Pattern)
이번에 살펴볼 디자인 패턴은 가장 유명한 디자인 패턴 중 하나인 팩토리 패턴(Factory Pattern)이다. 이 팩토리 패턴은 조금 더 구체적인 용어인 팩토리 메소드 패턴(Factory Method Pattern)으로도 알려져 있다. 팩토리 패턴에 대한 오해 많은 사람들이 팩토리 패턴을 객체 생성을 위한 클래스를 사용하는 것으로 알고 있다. 실제로 많은 글들을 보면 팩토리 패턴을 공장에 input을 넣으면 결과물이 나오는 구조를 설명해놓은 것이 대부분이다. 하지만 위 패턴은 팩토리 '패턴' 이 아니다. 그림으로보면 input에 따라 Factory 가 객체를 다르게 만들어주는 일종의 전략 패턴이라고 생각할 수 있다. 보통 많은 사람들이 위와 같이 팩토리 패턴을 생각하는데, 위와 같은 팩토리를 "심플 팩..
[Design Pattern] 구조 패턴 - 퍼사드 패턴(Facade Pattern)
Facade Pattern 퍼사드 패턴(Facade Pattern)은 사용하기 복잡한 클래스 라이브러리에 대해 사용하기 편하도록 간편한 인터페이스(API)를 구성하기 위한 구조 패턴 이다. 예를들어 라이브러리의 각 클래스와 메서드들이 어떤 목적의 동작인지 이해하기 어려워 바로 가져다 쓰기에는 난이도가 높을때, 이에 대한 적절한 네이밍과 정리를 통해 사용자로 하여금 쉽게 라이브러리를 다룰수 있도록 인터페이스를 만드는데, 우리가 교제를 보고 필기노트에 재정리를 하듯이 클래스를 재정리하는 행위로 보면 된다. 본래 프로그램이라는 것은 업데이트를 통해 점점 커지게 된다. 버전이 올라갈수록 많은 클래스들이 만들어져 서로 관계를 맺으면서 점점 복잡해지게 된다. 그래서 커다란 솔루션을 구성하려면 상호 관련된 많은 클래..
[Design Pattern] 생성 패턴 - 빌더 패턴(Builder Pattern)
Builder Pattern 빌더 패턴(Builder Pattern)은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식이다. 이해하기 쉬운 사례로 수제 햄버거를 들 수 있다. 수제 햄버거를 주문할때 빵이나 패티 등 속재료들은 주문하는 사람이 마음대로 결정한. 어느 사람은 치즈를 빼달라고 할 수 있고 어느 사람은 토마토를 빼달라고 할수 있다. 이처럼 선택적 속재료들을 보다 유연하게 받아 다양한 타입의 인스턴스를 생성할수 있어, 클래스의 선택적 매개변수가 많은 상황에서 유용하게 사용된다. 빌더 패턴 탄생 배경 점층적 생성자 패턴 점층적 생성자 패턴(Telesc..
[Design Pattern] 구조 패턴 - 브릿지 패턴(Bridge Pattern)
브릿지 패턴(Bridge Pattern) 이란? 브릿지 패턴은 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조(추상화 및 구현)로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴이다. extend(상속) 보다 composition(합성) 을 적극 활용한다. 같은 말로는 아래와 같이 얘기할 수 있겠다. 구현(implementation)으로부터 추상(abstraction) 레이어를 분리하여 이 둘이 서로 독립적으로 변화할 수 있도록 한다." "구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 한다. 즉 기능과 구현에 대해서 두 개를 별도의 클래스로 구현을 한다." "두개의 다른 계층(하나는 추상, 하나는 구현인 서로다른 계층의 커플링..
[Design Pattern] 행동 패턴 - 전략 패턴(Strategy Pattern)
전략 패턴 (Strategy Patter) 이란 전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 이다. 여기서 '전략'이란 일종의 알고리즘이 될 수 도 있으며, 기능이나 동작이 될 수도 있는 특정한 목표를 수행하기 위한 행동 계획을 말한다. 즉, 어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우에 적합한 패턴이다. 전략 패턴 구성 요소 전략 패턴을 이루는 구성 요소는 다음과 같다. 전략 알고리즘 객체들(concrete strategy) : 알고리즘, 행위, 동작을 객체로 정의한 구현체 전략 인터페이스 : 모든 전략 구현제에 대한..
[Design Pattern] 구조 패턴 - 프록시 패턴(Proxy Pattern)
프록시 패턴(Proxy Pattern)이란? 프록시(Proxy)를 번역하면 대리자, 대변인의 의미를 갖고 있다. 무엇인가를 대신 처리하는 의미라고 할 수 있다. 일종의 비서라고 생각하면 된다. 사장님한테 사소한 질문을 하기보다는 비서한테 먼저 물어보는 개념이라고 생각할 수 있겠다. 이렇게 어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조 하는것이 아니라, 해당 객체를 대행(대리, proxy)하는 객체를 통해 대상객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고 또한 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있다. 더보기 구조 패턴(Structural Pattern)이란? 구조 패턴이란 작은 클래스들을 상속과 합성을..
[Design Pattern] 행동 패턴 - 옵저버 패턴(Observer Pattern)
옵저버 패턴(Observer Pattern)이란? 옵저버패턴(Observer Pattern)이란 객체의 상태 변화를 관찰하는 옵저버들(관찰) 목록을 객체에 등록하여 상태 변화가 있을 때마다 notify 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 어떤 객체의 상태가 변할 때 그와 연관된 객체 들에게 알림을 보내는 디자인 패턴 이라고 생각하면 된다. 옵저버 패턴에는 주체 객체와 상태의 변경을 알아야 하는 관찰 객체(Observer Object)가 존재하며 이들의 관계는 1:1이 될 수도 있고 1:N이 될 수도 있다. 주로 분산 이벤트 핸들링 시스템을 구현한다. 발행/ 구독 모델로 알려져 있기도 하다. notify 함수는 관찰 대상이 발행한 메시지 이외에, 옵저버 자..
[Design Pattern] 생성 패턴 - 싱글톤 패턴(Singleton Pattern)
싱글톤 패턴(Singleton Pattern)이란? 싱글톤 패턴이란 단 하나의 유일한 객체를 만들기 위한 코드 패턴이다. 쉽게 말하자면 메모리 절약을 위해, 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법을 말한다. 즉, 프로그램 시작부터 종료 시점까지 어떤 클래스의 인스턴스가 메모리 상에 단 하나만 존재할 수 있게 하고 이 인스턴스에 대해 어디에서나 접근할 수 있도록 하는 패턴이다. 우리가 전역 변수라는 걸 만들어 이용하는 이유는, 똑같은 데이터를 메서드마다 지역 변수로 선언해서 사용하면 무의미하기도 않고 낭비이기 때문에, 전역에서 한번만 데이터를 선언하고 가져와 사용하면 효율적이기 때문이다. 이러한 개념을 그대로 클래스에 대입한 것이 싱글톤 패턴이라고 ..
디자인 패턴(Design Pattern)이란?
디자인 패턴(Design Pattern)이란? 소프트웨어 개발 방법으로 사용되는 디자인패턴(Desigin Pattern)은 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 그 방법에 이름을 붙여서 이후에 재사용하기 좋은 형태로 특정 규약을 만들어서 정리한 것이다. 이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진 청사진과 비슷하다. 표준화된 라이브러리들이나 함수들은 코드에 복사해 사용하지만 패턴들을 붙여넣기식으로 사용할 수 없다. 패턴은 재사용할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이다. 패턴은 알고리즘과 자주 혼동된다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하기 때문입니다. 알고리즘..
1.3.2.3. 관계(집합 관계)
JAVA 객체지향 디자인 패턴 정리 UML 연관 관계의 특별 경우로 전체와 부분의 관계를 명확하게 명시하고자 할 때 사용한다. 1. 집약 관계(aggregation) 한 객체가 다른 객체를 포함하는 것 '부분'을 나타내는 객체를 다른 객체와 공유할 수 있다. '전체'를 가리키는 클래스 방향에 빈 마름모로 표시 전체 객체의 라이프타임과 부분 객체의 라이프타임은 독립적이다. 전체 객체가 메모리에서 사라진다 해도 부분 객체는 사라지지 않는다. // Ex) 생성자에서 참조값을 인자로 받아 필드를 세팅한다. public class Computer { private MainBoard mb; private CPU c; //생성자 public Computer(MainBoard mb, CPU c) { this.mb = ..