본문 바로가기
Computer Science/CS전공지식노트

[CS] 1장 디자인 패턴과 프로그래밍 패러다임 - 1

by na1-4an 2024. 7. 17.

면접을 위한 CS 전공지식 노트(길벗, 주홍철)

1.1 디자인 패턴

💡 디자인 패턴이란?
      프로그램 설계 시 발생한 문제들을 해결할 수 있도록, 하나의 '규약' 형태로 만들어 놓은 것.
class, object, instance
class: 설계도, 틀
object: 구현할 대상
instance: 실제로 구현된 구체적인 실체

 

(1) 싱글톤 패턴

: 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴

  • 장점1: 인스턴스를 생성할 때 드는 비용 감소.
    • (하나의 인스턴스를 만들어 놓고, 해당 인스턴스를 다른 모듈들이 공유함 사용하기 때문.)
  • 단점1: 의존성 증가.
    • 해결: 의존성 주입자 추가. → 메인 모듈로부터의 의존성이 떨어지게 됨.
    • 의존성 주입의 원칙 - 상위 모듈은 하위 모듈에서 어떤 것도 가져오면 안됨, 추상화에 의존해야 함.
    • 의존성 주입의 장점: 테스팅 쉬워짐, 모듈 간 관계 명확
    • 의존성 주입의 단점: 복잡성 증가
  • 단점2: TDD(Test Driven Development)에 적합하지 않음. (단위 테스트하기 어려움.)

 

(2) 팩토리 패턴

: 객체 생성 부분을 떼어내 추상화한 패턴.

  의존성 주입으로 볼 수 있음.

  • 장점1: 느슨한 결합으로, 유연성을 얻을 수 있음.
  • 장점2: 유지 보수성 증가.(리팩토링 시 한 곳만 고치면 됨.)

 

(3) 전략 패턴

: 캡슐화 알고리즘("전략")을 컨텍스트 안에서 바꿔주며 상호 교체가 가능한 패턴.

 (LUNACard 구매, KAKAoCard 구매 - 구매 자체의 행위 안의 strategy를 바꾸는 것)

 

(4) 옵저버 패턴

: 주체가 어떤 객체(subject)의 상태 변화를 관찰하다가,

  상태 변화가 있을 때마다 옵저버들에게 변화를 알려주는 패턴. 

 

  이벤트 기반 시스템, MVC 패턴에서 사용

  (ex. 내가 팔로우한 사람의 새로운 트윗을 내가 알림 받는 것)