디자인 패턴을 왜 써야할까?

2022. 10. 10. 12:13BackEnd(Java)/Design Pattern

✅ 아래 내용들에 대해서 알아보자

- 디자인 패턴이란?
- 디자인 패턴의 역사(기원)

- 디자인 패턴을 왜 써야 하는가?
- 디자인 패턴 사용의 장단점
- 디자인 원칙
- 디자인 패턴의 유형

 

디자인 패턴이란?

 디자인 패턴이란 이전의 개발자들이 반복적으로 발생하는 유사한 문제를 발견하였고, 그것들을 해결하기 위한 일련의 반복 작업을 공통화 것이다. 그래서 이전 선배 개발자들의 문제 해결 능력을 모은 것이 Desing Pattern이다.

 

디자인 패턴 = 디자인(= 설계, 구조) + 패턴(= 많은 개발자들이 일반적으로 사용하는 구조)이다.

 

 

디자인 패턴의 기원

 디자인 패턴은 건축 분야에서 비롯되었다. 건축가이자 패턴의 아버지, Christopher Alexander는 "각 디자인 패턴은 기존 환경 내에서 반복적으로 일어나는 문제들을 설명한 후, 그 문제들에 대한 해법의 핵심을 설명해 준다. 똑같은 방법으로 두 번 하지 않고 해법을 재사용할 수 있게 해 준다"라고 하였다.

 

1987년에 Kent Beck과 Ward Cunningham이 디자인 패턴이 프로그래밍에 적용될 수 있다는 것을 발견하였고, 그들은 알려진 문제에 적용할 수 있도록 개념을 개발을 해왔다.

 

1994년 디자인 패턴 책으로 유명한 Design Patterns: Elements of Reusable Object-Oriented Software(재사용 가능한 객체 지향 소프트웨어의 요소)라는 책의 출판과 함께 커뮤니티에서 더욱 명확해지고 널리 채택되었고, 이 책은 Erich Gamma, Richard로 구성된 GoF(Gang of 4)가 저술했다.

 

라고 하네요... 역시 설계의 근본은 건축 분야인가  😁😁

 

그렇다면 디자인 패턴을 왜 써야 할까?

 우리는 실무에서 일하다 보면 여러 가지 변화의 상황에 직면하게 된다.

  1. 사용자가 다른 것을 요구하거나 새로운 기능을 원할 때
  2. 회사에서 DB 종류를 바꾸거나 데이터 포맷이 완전히 다른 경우
  3. 잦은 요구사항 변경 등..

 

결국 이러한 상황을 겪게 되면 코드의 변경은 불가피하다. 우리는 항상 개발하면서 느껴왔다 실제 제품을 출시하는데 개발 소요 시간보다 출시 이후 유지 보수하는 시간이 더 많이 걸린다는 사실을.. 기존 코드가 개판(?)으로 되어 있으면 유지보수가 정말 힘들어지고 설계의 중요성을 다시 한번 느끼게 된다.

 

그러면 우리는 현재의 요구사항만 충족하지 않고 추 후 변경에 일어날 것에 대해 미리 대비하여 설계해서 유지보수에 대한 시간을 줄이는 게 더 좋지 않을까?

 

자, 그렇다면 이제 디자인 패턴을 적용해야 할 때이다. 

 

디자인 패턴을 사용했을 때의 장단점

 디자인 패턴은 결국 많은 실무 프로그래머들이 경험한 유지보수에 좋은 효율적인 설계 및 구조이다. 디자인 패턴을 적용한 코드는

[장점]
- 코딩이 명확하고 단순해지며

- 모듈(class나 function 등)은 한 가지 기능한 하도록 작게 세분화시킬 수 있으며(SRP)
- 재사용성이 높고
- 유지 보수가 쉬우며
- 리소스의 낭비가 없다
- 개발 시간이 단축된다.
- 유연한 개발이 가능하다

[단점]
- 모든것을 패턴으로 해결하려고 한다.(오버 엔지니어링)

- 잘못 이해하고 사용할 경우 큰 리스크를 가지게 된다

 

위와 같은장단점을 가지게 되지만  디자인 패턴에 대해서 정확히 이해하고 사용해야 제대로 된 효과를 볼 수 있게 된다.

 

그러니 꼭!!!! 이해하고 사용하도록 하자 😣😣😣

 

 

디자인 원칙

1. 어플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.(핵심)

    -> 바뀌는 부분은 따로 뽑아서 캡슐화한다. 그러면 나중에 바뀌지 않는 부분에는 영향을 미치지 않고 그 부분만 고치거나 확장할 수 있다

 

2. 구현보다는 인터페이스에 맞춰서 프로그래밍한다.

 

3. 상속보다는 구성("A에는 B가 있다" 관계)을 활용한다.

 

 

디자인 패턴의 유형

 Creation Pattern(생성 패턴)

  • 객체 생성에 관련된 패턴
  • 객체의 생성과 조합을 캡슐화하여 특정 객체가 생성, 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성 제공

Structual Pattern(구조 패턴)

  • 클래스와 객체를 조합해 더 큰 구조를 만드는 패턴
  • 예를 들어, 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공 혹은 새로운 기능을 제공하는 패턴

 

Behavioral Pattern(행위 패턴)

  • 객체와 객체 간의 통신에 관련된 패턴

 

 

표로 정리한 디자인 패턴 종류

GOF
디자인

패턴 종류
  생성 패턴 구조 패턴 행위 패턴
  추상 팩토리 어댑터 책임 연쇄
  빌더 브리지 커맨드
  팩토리 메서드 컴퍼지트 인터프리터
  프로토타입 데코레이터 이터레이터
  싱글턴 퍼사드 메멘토
    플라이웨이트 옵저버
    프록시 스테이트
      스트레티지(전략)
      템플릿 메서드
      비지터

 

 

 

자 그러면 이제 선배 개발자들이 잘 정리한 패턴들의 GOF 바탕으로 하여  유형별로 하나하나씩 배워서 써먹어보자 😉😉

 


참고자료

 

반응형

'BackEnd(Java) > Design Pattern' 카테고리의 다른 글

커맨드 패턴  (1) 2024.10.07
데코레이터 패턴  (0) 2024.09.24
옵저버 패턴  (0) 2024.09.23
전략 패턴  (2) 2022.10.10
Builder 패턴  (0) 2022.03.30