-
디자인패턴
- 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것
- 라이브러리나 프레임워크를 만드는데 기초적인 원리가 되며 지금도 많은 라이브러리, 프레임워크가 어떠한 디자인패턴을 기반으로 만들어지고 있음
디자인패턴의 의의
- 디자인패턴들을 미리 배워 놓는다면 이걸 기반으로 여러 문제를 해결하는 데 있어서 영감을 받을 수 있음
- 팀원들과 협업할 때 어떤 문제가 나타났을 때 "그 부분은 전략패턴"으로 하는 게 어떤가요?라고 했을 떼 빠른 의사소통이 가능
디자인패턴의 종류
- 디자인 패턴은 크게 생성패턴, 구조패턴, 행동패턴 3가지로 나눠짐
- 생성패턴 : 객체 생성 방법이 들어간 디자인패턴
ex) 싱글톤, 팩토리, 추상팩토리, 빌더, 프로토타입패턴 - 구조패턴 : 객체, 클래스 등으로 큰 구조를 만들 때 유연하고 효율적으로 만드는 방법이 들어간 디자인패턴
ex) 프락시, 어댑터, 브리지, 복합체, 데코레이터, 퍼사드, 플라이웨이트패턴 - 행동패턴 : 객체나 클래스 간의 알고리즘, 책임 할당에 관한 디자인패턴
ex)이터레이터, 옵저버, 전략, 책임연쇄, 커맨드, 중재자, 메멘토, 상태, 템플릿메서드, 비지터패턴
- 생성패턴 : 객체 생성 방법이 들어간 디자인패턴
라이브러리
- 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것
- 폴더명, 파일명 등에 대한 규칙이 없고 프레임워크에 비해 자유로움
- ex) 자동차, axios
프레임워크
- 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것
- 폴더명, 파일명 등에 대한 규칙이 있으며 라이브러리에 비해 좀 더 엄격함
- ex) 비행기, vue.js, Django
싱글톤패턴
- 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
- 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만
그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어
이를 기반으로 로직을 만드는데 쓰이며 보통 데이터베이스 연결모듈에 많이 사용 - 장점
- 하나의 인스턴스를 기반으로 해당 인스턴스를 다른 모듈들이 공유하여 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄음
- "인스턴스 생성에 많은 비용"이 드는 I/O 바운드 작업에 많이 사용
- 단점
- 의존성이 높아지며 TDD(Test Driven Development)를 할 때 걸림돌이 됨
(TDD를 할 때 단위 테스트를 주로 하는데,
단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행할 수 있어야 함) - 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로
각 테스트마다 '독립적인' 인스턴스를 만들기 어려움
- 의존성이 높아지며 TDD(Test Driven Development)를 할 때 걸림돌이 됨