면접을 위한 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. 내가 팔로우한 사람의 새로운 트윗을 내가 알림 받는 것)