디자인 패턴에 대해 알아보도록 하겠습니다!
스프링 개발할 때, 그저 남들이 쓰길래, 유지보수가 좋길래 그냥 쓰던 정적 팩토리 메서드에 대해 찾아보다가 찾아보다가...
결국 디자인 패턴을 정리해보자! 하게 되었습니다
(항상 찾아보면 그 단어가 왜 나왔는지 유래는 잘 안나오고, 설명 글들이 많은 것 같습니다...그래서 이번 기회에 한번 찾아보았습니다)
디자인 패턴을 찾아보면 GoF 디자인 패턴이 많이 나오는데, 이것이 객체지향 프로그래밍(OOP) 설계를 할 때 자주 사용되는 패턴이다. 디자인 패턴를 찾으면 GoF 패턴이 많이 나오는 이유가 바로 GoF 패턴이 "디자인 패턴"이라는 개념의 시작점이기 때문이다.
디자인 패턴은 1987년에 작성된 "Using Pattern Languages for Object-Oriented Programs"에서 제안되었다.
이후 1995년에 이른바 사인방(GoF: Gang of Four)이 쓴 23개의 디자인 패턴을 수록한 "Design Patterns: Elements of Reusable Object-Oriented Software(재이용 가능한 객체지향 소프트웨어의 요소 - 디자인 패턴)"라는 책에서 처음 구제적으로 제시되었다.
GoF 패턴은 객체지향 프로그래밍이 널리 사용되기 시작한 시점에 발표됐다.
GoF(Gang of Four): 네명의 컴퓨터 과학 연구자들(에릭 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스)의 네명을 지칭한다.
Q. GoF말고 무슨 패턴이 있을까?
A.
출처: https://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4
GoF는 앞서 말했듯 객체지향 프로그래밍(OOP) 설계를 할 때 자주 사용되는 패턴이다. 객체지향 설계 원칙(SOLID)를 기반으로 소프트웨어 유연성, 재사용성, 유지보수성을 향상시키는데 초점을 두었다.
GoF 디자인 패턴은 목적에 따라 크게 3가지로 나눈다.
| 목적/범위 | 클래스 | 객체 |
|---|---|---|
| 생성 패턴 | 팩토리 메소드(Factory Method) | 추상 팩토리(Abstract Factory), 빌더(Builder), 프로토타입(Prototype), 싱글톤(Singleton) |
| 구조 패턴 | 어댑터(Adapter) | 어댑터(Adapter), 브리지(Bridge), 컴포지트(Composite), 데코레이터(Decorator), 퍼사드(Facade), 플라이웨이트(Flyweight), 프록시(Proxy) |
| 행위 패턴 | 인터프리터(Interpreter), 템플릿 메소드(Template Method) | 책임 연쇄(Chain of Responsibility), 커맨드(Command), 반복자(Iterator), 중재자(Mediator), 메멘토(Memento), 옵저버(Observer), 상태(State), 전략(Strategy), 비지터(Visitor) |
생성 패턴 5개, 구조 패턴 7개, 행위 패턴 11개, 총 23개의 패턴으로 구성된다.
객체 생성 방식을 다루는 패턴이다.
클래스나 객체들을 조합해 더 큰 구조로 만들 수 있게 해주는 패턴이다. 구조 클래스 패턴은 상속을 통해 클래스가 인터페이스를 합성하고, 구조 객체 패턴은 객체를 합성하는 방법을 정의한다.
클래스나 객체들이 서로 상호작용하는 방법이나 어떤 태스크, 어떤 알고리즘을 어떤 객체에 할당하는 것이 좋을지를 정의하는 패턴이다. 즉, 객체나 클래스의 교류 방법에 대해 정의하는 것이다.
정처기 공부하면서 디자인 패턴 종류 외웠던 기억이 나네요
이 중에서 중요도가 높다고 생각되는 디자인 패턴들을 위주로 추가 공부해봐도 좋을 것 같습니다
그리고 뭔가 예시 소스코드가 간단하게라도 들어가면 좋을 것 같네요!
잘 읽었습니다~