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