[CS] CS전공지식_디자인 패턴과 프로그래밍 패러다임
본 문서는 면접을 위한 CS 전공지식 노트 필기를 바탕으로 작성되었습니다
디자인 패턴과 프로그래밍 패러다임
라이브러리 : 공통으로 사용될 수 있는 기능들을 모듈화한 것을 의미
폴더명, 파일명 등에 대한 규칙이 없고, 프레임 워크에 비해 자유롭다
프레임 워크: 공통으로 사용될 수 있는 기능들을 모듈화한 것을 의미
폴더명, 파일명 등에 대한 규칙이 있으며 라이브러리에 비해 좀 더 엄격
디자인 패턴
프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호관계 등을 이용하여 해결할 수 있도록 하나의
규약형태로 만들어 놓은 것을 의미
싱글톤 패턴
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
- 장, 단점
- 장점 : 인스턴스 생성 비용 감소
- 단점 : 의존성의 높아짐, TDD가 힘들어서 테스트마다 독립적인 인스턴스르 만들 수가 없다
데이터베이스 연결모듈, 게임 매니저 등에 사용한다
- 의존성 주입 (DI, Dependency Injection)
- 모듈간의 결합을 조금 더 느슨하게 만들어서 싱글톤 패턴의 단점을 상쇄할 수 있다
- 메인 모듈이
직접다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈이간접적으로 의존성을 주입하는 방식 - 모듈을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고 마이그레이션하기 수월함
- 구현시 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어주기 때문에 애플리케이션 의존성 방향이 일관되고, 애플리케이션을 쉽게 추론할 수 있으며, 모듈 간의 관계들이 명확해짐
- 모듈들이 더욱더 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있으며 약간의 런타임 패널티가 생김
- 의존성 주입 원칙
- 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다. 또한 둘 다 추상화에 의존해야 하며, 이때 추상화는 세부 사항에 의존하지 말아야 한다
팩토리 패턴
클래스의 인스턴스를 만드는 일을 서브 클래스에게 맡기는 패턴
- 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴
- 상위클래스 : 중요한 뼈대 결정
- 하위클래스 : 객체 생성에 대한 구체적인 내용을 가짐