싱글톤 패턴
- 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
- 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만, 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는 데 쓰이며, 보통 데이터베이스 연결 모듈이 많이 사용함.
- 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있지만, 의존성이 높아진다는 단점도 있다.
[단점]
- TDD를 할 때 걸림돌이 된다.
- 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 ‘독립적인’ 인스턴스를 만들기가 어렵다.
[의존성 주입]

싱글톤 패턴은 사용하기가 쉽지만 모듈 간의 결합을 강하게 만들 수 있다는 단점이 있는데, 이때 의존성 주입(DI)을 통해 모듈 간의 결합을 조금 더 느슨하게 만들어 해결할 수 있다.
*의존성: 종속성이라고도 하며 A가 B에 의존성이 있다는 것을 B의 변경 사항에 대해 A 또한 변해야 된다는 것을 의미
위 그림에서 상위 모듈은 하위 모듈에 대한 의존성이 떨어지게 됨을 알 수 있다.
모듈들을 쉽게 교체할 수 있는 구조가 되어 테스트하기 쉽고 마이그레이션하기도 수월하다는 장점이 있다.
구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어주기 때문에 애플리케이션 의존성 방향이 일관되고, 쉽게 추론할 수 있으며, 모듈 간의 관계들이 조금 더 명확해진다.
모듈들이 더욱더 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있으며 약간의 런타임 패널티가 생길수도 있다는 단점이 있다.
“상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다. 또한, 둘 다 추상화에 의존해야 하며, 추상화는 세부 사항에 의존하지 말아야 한다.”
팩토리 패턴

- 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴.
- 상위 클래스와 하위 클래스가 분리되기에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기에 더 많은 유연성을 갖게된다.
- ex. 라떼 레시피, 우유 레시피라는 구체적인 내용이 들어있는 하위 클래스가 컨베이어 벨트를 통해 전달, 상위 클래스인 바리스타 공장에서 이 레시피들을 토대로 우유 등을 생산하는 생산 공정을 생각.
전략 패턴

- 정책 패턴이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 ‘직접’ 수정하지 않고 전략이라고 부르는 ‘캡슐화한 알고리즘’을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴
옵저버 패턴


- 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴
- 주체란 객체의 상태 변화를 보고 있는 관찰자이며, 옵저버들이란 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 ‘추가 변화 사항’이 생기는 객체들을 의미한다.

- 주로 이벤트 기반 시스템에 사용하며 MVC 패턴에도 사용된다.
- ex. 주체라고 볼 수 있는 모델에서 변경 사항이 생겨 update() 메서드로 옵저버인 뷰에 알려주고 이를 기반으로 컨트롤러 등이 작동
[자바: 상속과 구현]
- 상속(extends): 자식 클래스가 부모 클래스의 메서드 등을 상속받아 사용하며 자식 클래스에서 추가 및 확장을 할 수 있음. 재사용성, 중복성의 최소화가 이뤄짐.
- 구현(implements): 부모 인터페이스를 자식 클래스에서 재정의하여 구현하는 것을 말하며, 상속과는 달리 반드시 부모 클래스의 메서드를 재정의하여 구현해야함.
- 상속과 구현의 차이: 상속은 일반클래스, abstract 클래스를 기반으로 구현하며, 구현은 인터페이스를 기반으로 구현한다.
프록시 패턴

- 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 해당 접근을 필터링하거나 수정하는 등의 역할을 하는 계층이 있는 디자인 패턴
- 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다.
프록시 서버
- 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나, 응용 프로그램
프록시 서버로 쓰이는 nginx

- 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용된다.
Q. 싱글톤 패턴에 대해서 설명
A
- 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 개체를 어디에서든지 참조할 수 있도록 하는 패턴입니다.
- 하나의 인스턴스만을 생성하며 getInstance메서드로 모든 클라이언트에게 동일한 인스턴스를 반환
- private 생성자를 가지는 특징을 가지며, 생성된 싱글톤 오브젝트는 저장할 수 있는 자신과 같은 타입의 static 필드를 정의한다.
- 싱글톤은 stateless로 설계해야한다.
Q. 전략 패턴에 대해서 설명
A
- 알고리즘을 객체 단위로 캡슐화하는 디자인 패턴
- 해당 패턴에서 알고리즘은 인터페이스를 통해 정의 및 이용되고 해당 인터페이스를 따르는 클래스를 통해 구현된다.
- 해당 패턴을 통해서 사용자는 알고리즘을 필요에 따라 바꿔서 사용할 수 있게 된다.
- 객체지향 설계의 SOLID 원칙 중 개방 폐쇄 원칙 (OCP)에 부합한 패턴이다.
출처
- 면접을 위한 CS 전공지식 노트
- https://github.com/ksundong/backend-interview-question
'CS 및 면접복기' 카테고리의 다른 글
| 20250829 (2) | 2025.08.29 |
|---|---|
| 20250820 - 디자인패턴(2) (2) | 2025.08.20 |
| 20250811 - Network (2) | 2025.08.11 |
| 20250808 (3) | 2025.08.08 |
| 20250807 - ALL (3) | 2025.08.07 |