1.디자인 패턴(Design Pattern)이란?
객체지향적인 소프트웨어를 잘 설계한다는 것은 생각보다 쉬운 일이 아닙니다.
지금 당장 갖고 있는 문제를 해결한다에 그치지 않고 나중에 생길 수 있는 문제나 추가된 요구 사항들도 수용할 수 있도록 일반적이고 포괄적으로 설계해야 합니다.
이를 위해 설계할 때 고려사항으로 SOLID 원칙 등 객체지향적 소프트웨어 설계 방법론이 있고 현업에서는 이에 따라 개발하기 위해 노력하고 있습니다.
자, 우리는 Java로 파일 입출력을 어떻게 구현할까요?
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class File{
// ...
FileInputStream is = new FileInputStream(file);
is.read();
FileOutputStream os = new FileOutputStream(file);
os.write(buffer);
}
클래스 라이브러리를 사용하여 파일 입출력을 구현합니다.
클래스 라이브러리는 부품이 되는 프로그램을 의미하지만 디자인패턴은 부품이 어떻게 조립되어 있고, 각각의 부품이 어떻게 조립되어 있고, 각각의 부품이 어떻게 관련해서 큰 기능을 발휘하는지 표현한 것 입니다.
디자인 패턴은 설계자로 하여금 재사용이 가능한 설계는 선택하고, 재사용을 방해하는 설계는 배제하도록 도와줍니다. 또한 패턴을 쓰면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고, 클래스의 명세도 정확하게 할 수 있으며, 객체 간의 상호작용 또는 설계 의도까지 명확하게 정의할 수 있습니다.
간단하게 말해 디자인 패턴은 설계자들이 "올바른" 설계를 "빨리" 만들 수 있도록 도와줍니다.
2. 디자인 패턴(Design Pattern)의 분류
1. 생성(Creational) 패턴
객체를 생성하고 참조하는 과정을 추상화하여 시스템이 객체의 생성과 조합 등에 구애 받지 않고 개발될 수 있도록 도와준다.
즉, 특정 객체가 생성되고 변경되어도 전체 시스템의 변화는 초소화되도록 만들어 주어, 시스템의 확장이나 유지보수 시 최소 비용이 들도록 만들어 준다.
- Factory Method, Abstract Factory, Prototype, Singleton, Builder
2. 구조(Structural) 패턴
여러 클래스들로 이루어진 복잡한 구조를 가진 시스템의 효율적인 개발을 위해 구조를 분산하여 새로운 기낭의 추가를 효과적으로 할 수 있도록 한다.
- Decorator, Adapter, Proxy, Bridge, Facade, Composite, Flyweight
3. 행동(Behavioral) 패턴
객체들 간에 행위나 알고리즘 등과 관련된 패턴이다.
응용 분야에 따라 행위가 다른 객체로 옮겨가거나 알고리즘이 대체되는 경우 사용한다.
- Template Method, Strategy, Visitor, Iterator, Mediator, Observer, Interpreter, Memonto, State, Command
3. 디자인 패턴을 공부하는 방법
개발자 세계에는 수십 개의 디자인 패턴이 있습니다. 사실 어떤 문제에 어떤 패턴을 사용해야 할 지 판단하는 것은 어려운 일입니다. 특히, 디자인 패턴에 대해 정확히 파악하고 있지 않은 개발자라면 더욱 어려울 것 입니다.
아래와 같은 방법으로 공부해 보세요 ( ' ^ ' ) !
- 생성, 구조, 행동 패턴이 각각 어떤 문제들을 해결하는 지 파악합니다.
- 패턴들 간 관련성을 파악합니다.
- 비슷한 목적의 패턴들을 모아서 함께 공부합니다. - 각 패턴들의 공통점과 차이점 비교
- 예제 코드를 직접 작성해 보면서 이해합니다.
'IT knowledge > GoF & Architecture' 카테고리의 다른 글
Layered Architecture (계층화 아키텍처) 란 무엇인가? (0) | 2023.03.13 |
---|---|
[디자인 패턴] 데코레이터 패턴(Decorator Pattern) 정리 및 예제 - 구조패턴 (0) | 2021.04.15 |
[디자인 패턴] 싱글톤 패턴(Singleton Pattern) 정리 및 예제 - 생성 패턴 (4) | 2021.04.14 |
[디자인 패턴] 어댑터 패턴(Adapter Pattern) 개념 정리 및 예제 - 구조 패턴 (0) | 2021.04.08 |
[디자인 패턴] 디자인 패턴 개념 및 종류와 SOLID원칙 (객체지향 5대 원칙) (0) | 2020.12.24 |