(공부중) 객체지향 디자인패턴
본문 바로가기

Computer Science

(공부중) 객체지향 디자인패턴

OOP (객체지향 프로그래밍)

특성

  • 캡슐화
  • 상속
  • 추상화
  • 다형성

설계원칙 (SOLID)

  • Single Responsibility Principle (SRP) : 클래스는 하나의 역할만 해야한다
  • Open Close Principle (OCP)
  • The Liskov Substitution Principle (LSP)
  • Interface Segration Principle (ISP)
  • Dependency Inversion Principle (DIP)

디자인 패턴

각 패턴이 무엇이며, 어떤 경우에 사용하는지 예시 정도 알아두기

생성 패턴

1) Singleton

  • 객체가 하나만 만들어져야 하는 경우 사용
  • e.g) 전체 페이지에 똑같이 적용되는 다크모드
  • 클래스 안의 static이 아닌 변수나 메소드들은 객체가 생성될 때마다 메모리 공간을 새로 차지하지만
  • static으로 선언된 것들은 객체가 얼마나 만들어지든 메모리의 지정된 공간에 딱 하나씩만 존재함

예제 코드

=> FirstPage에서 변경한 settings가 SecondPage에서 그대로 출력됨

(위 코드는 멀티쓰레드 환경 등에서 오류 발생할 수 있음, 싱글톤을 안전하게 사용할 수 있는 방법들을 언어마다 검색해보기)

2) Factory Method

3) Abstract Factory

4) Builder

5) Prototypef

 

구조 패턴

1) Adapter

  • 서로다른 형식을 호환해주는 도구
  • In OOP, 인터페이스가 서로 다른 객체들이 같은 형식 아래 작동할 수 있도록 해주는 도구 

2) Proxy

  • 인터넷에서 받아와야 해서 시간이 걸리거나 메모리를 많이 차지하거나 하는 등의 이유로 여러 객체로 생성하기가 부담 되는 클래스가 있을 때, 그 클래스의 'Proxy', 대리자 역할을 하는 클래스를 따로 두어서
  • 가벼운 일은 비서가 처리하고 무거운 작업을 할 때만 실제 클래스를 생산해서 사용하는 방법
  • e.g) 유튜브 썸네일에 마우스 가져가면 프리뷰 재생되는 기능

 

3) Bridge

행위 패턴

1) Strategy

  • 프로그램 실행 중 모드가 바뀔 때마다 검색이 이뤄지는 방식, 즉 전략이 수정됨
  • 옵션들마다의 행동들을 모듈화해서 독립적이고 상호 교체 가능하게 만드는 것

전략 패턴 적용 전 코드 : 버튼들이 onClick 될 때마다 조건문으로 현재 mode 변수의 값에 따라 각 동작을 수행

=> SW가 커지고 복잡해질수록 코드 분석 및 관리가 어렵고, 클래스마다 역할지정을 뚜렷이 해서 모듈화된 SW를 구축하는 객체지향의 철학에도 어긋남

 

전략 패턴은 모드마다의 동작 하나하나를 모듈로 따로 분리해서, 버튼을 누를때마다 실행될 모듈을 갈아끼워주는 방식

  • 인터페이스는 그 자체로 객체를 만들 순 없지만 특정 인터페이스를 implement 한 클래스는 해당 인터페이스에서 지정한 메소드를 필수로 선언해야함

2) State

  • 특정 상태마다 다르게 할 일, 나아가서 그 상태들 자체를 그 상태마다 실행시 할 일과 함께 모듈화해서 쓰임
  • e.g) 앱 화면의 다크 모드 여부를 켰다 껐다 하는 스위치

3) Command

 

4) Observer

 

 

학습 자료