디자인 패턴(Design Pattern)과 SOLID

SUIN·2023년 8월 5일
0

디자인패턴

목록 보기
1/2
post-thumbnail

디자인 패턴(Design Pattern)이란?

설계 기법 중 하나로, 디자인 패턴을 준수하여 차후에 발생하는 문제들을 사전에 예방할 수 있도록 합니다.
보통 객체지향 프로그래밍에 자주 쓰입니다

문제없이 깔끔하게 코드를 작성할 수 있도록 도와주는 설계 지침서

원칙 - SOLID (객체지향 설계 원칙)

SOLID는 객체지향이 준수해야하는 필수 덕목(?) 다섯 가지를 부르는 용어입니다.
우리가 이제부터 알아볼 디자인패턴의 근본같은 존재이므로 해당 개념들은 디자인패턴을 본격적으로 공부하기 이전에 필수적으로 숙지하고 넘어가는 것이 좋습니다.

단일 책임 원칙 - Single Responsibility Principle(SRP)

하나의 클래스는 하나의 역할(기능)만!
말 그대로 하나의 객체가 너무 많은 작업을 수행하지 않도록 주의해야 한다는 원칙입니다,

ex) 전구는 빛을 밝혀주는 기능이 있는데, 여기에 추가로 노래가 나오는 기능이 나올 필요는 없습니다. 전구는 빛만 잘 비춰주면 그걸로 됩니다!

개방 폐쇄 원칙 - Open Close Principle(OCP)

확장 (상속)에는 열려있고, 수정에는 닫혀있기.
자식 클래스가 개체를 참고하여 클래스를 확장할 수는 있어도 자식에 의해서 해당 개체가 영향을 받아 수정되지 않도록 유의합니다.

ex) 부모가 걸을 수 있음(work()) -> 자식도 걸을 수 있음(work()) / 자식이 뛸 수 없음(run()X)

리스코프 치환 원칙 - Liskov Substitution Principle(LSP)

자식이 부모의 자리에 항상 교체될 수 있어야 합니다.

자식이란 말이 헛되지 않도록.. 자식개체는 물려받은 기능만을 가지고 있어야 됩니다.
여기서 부모와 다른 기능을 구현하게 된다면, 부모님이 그 자리를 대체할 수 없습니다!

ex) 부모(자동차)일 때, 자식이 자가용, 경찰차일 수는 있지만 비행기일 수는 없습니다.

인터페이스 분리 법칙 - Interface Segregation Principle(ISP)

인터페이스를 각 쓰임새에 맞게 잘 분리하여야 합니다. 너무 하나의 인터페이스에 많은 작업이 치중되지 않도록 합니다.

ex) 프린터기의 작업을 모두 하나의 인터페이스로 진행할 것이 아니라 복사/스캔/프린트 등의 여러 개의 인터페이스로 분리하여 작업합니다.

의존 역전 원칙 - Dependency Inversion Property(DIP)

상위 모듈이 하위 모듈에 의존하면 안된다는 법칙임니다.
하나의 인터페이스(또는 추상 클래스)안에 하위 모듈이 연결되어 있는 구조 안에서 우리는 하위 모듈이 아닌 인터페이스를 참조하는 것이 맞습니다. 왜냐하면 상위 모듈은 하위 모듈과 비교하였을 때 크게 변화하지 않기 때문입니다.

ex) {승용차} 를 {운행} 하고자 합니다. 그리고 자동차를 {승용차}에서 {버스}로 변경하려고 합니다. 여기서 상위 모듈을 {자동차}로 만들어 진행해줍니다.

분류 (중요)

3가지 패턴의 목적을 이해하기!

생성 패턴 (Creational) : 객체의 생성 방식 결정

쉽게 말해서 객체를 생성할 때, 객체가 차후에 생성되고 변경되어도 프로그램에 영향을 받지 않을 수 있도록 합니다.

생성 패턴의 종류

  • 추상 팩토리
  • 팩토리 *
  • 빌더
  • 프로토타입
  • 싱글톤 *

구조 패턴 (Structural) : 객체간의 관계를 조직

서로 다른 두 개의 객체 사이의 관계를 잇고 끊어가며 더 큰 구조와 새로운 기능을 만들어가는 과정에서 사용됩니다.

구조 패턴의 종류

  • 어댑터 *
  • 브리지
  • 컴포지트 *
  • 데코레이터
  • 파사드
  • 플라이웨이트
  • 프록시

행위 패턴 (Behavioral): 객체의 행위를 조직, 관리, 연합

한 객체에서 사용되는 작업을 관리하거나 역할을 여러 개의 객체로 분배하는 등의 객체의 작업 내용에 관하여 더욱 효율적이고 안정적인 구조를 만들 수 있도록 합니다.

행위 패턴의 종류

  • 책임 체인
  • 커맨드
  • 인터프리터
  • 반복자
  • 중재자
  • 메멘토
  • 옵저버 *
  • 상태
  • 전략 *
  • 탬플릿 메소드 *
  • 방문자

앞으로 디자인 패턴의 종류를 생성, 구조, 행위 세가지의 분류에 따라서 차근차근 공부해볼 예정입니다.


참고

디자인 패턴의 개념
https://gyoogle.dev/blog/design-pattern/Overview.html
https://namu.wiki/w/%EB%94%94%EC%9E%90%EC%9D%B8%20%ED%8C%A8%ED%84%B4
https://readystory.tistory.com/114
https://gmlwjd9405.github.io/2018/07/06/design-pattern.html

SOLID 개념
https://inpa.tistory.com/entry/OOP-%F0%9F%92%A0-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84%EC%9D%98-5%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99-SOLID

profile
공부하기싫을때붙잡고공부해봤자비명밖에안나옵니다지금제가그래요

1개의 댓글

comment-user-thumbnail
2023년 8월 5일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기