디자인패턴은 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 패턴화 해놓은 것을 말합니다.

1.싱글톤 패턴
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴입니다.
장점
하나의 인스턴스를 만들어 놓고 공유하며 사용하기 때문에 인스턴스 생성비용이 줄어듭니다.
단점
의존성이 높아집니다. (DI를 통해 해결합니다.)

의존성 주입(DI)
메인 모듈이 직접 의존성을 주기 보다는 외부에서 주입하여 하위 모듈에 대한 의존성을 줄입니다.

2. 팩토리 패턴
객체를 사용하는 코드에서 객체 생성부분을 떼어내 추상화한 패턴입니다.
장점
객체 생성 로직이 따로 떼어져 있어 리팩터링 하기 수월하여, 유지 보수성이 증가합니다.

3. 전략 패턴
객체의 행위를 바꾸고 싶을 때 직접 수정하지 않고, 전략이라고 불리는 캡슐화한 알고리즘을 상호교체가 가능하게 만드는 패턴입니다.

4.옵저버 패턴
주체가 어떤 객체를 관찰하여 상태변화 시마다 메서드 등을 통해 옵저버들에게 변화를 알려주는 패턴입니다. 주체와 객체가 구분되지 않기도 합니다.
주로 이벤트 기반 시스템에 사용하며, MVC 패턴에도 사용됩니다.

5. 프록시 패턴
대상 객체에 접근하기 전 그 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 패턴입니다.
객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용합니다. 프록시 패턴은 프록시 서버의 형태로도 활용됩니다. ex) Nginx, Cloud Flare
프록시 서버
프록시 서버는 서버와 클라이언트 사이에서 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 말합니다.
포트 숨김, 로깅, DDOS 공격 방어, HTTPS 구축 등 다양한 역할을 해줍니다.

6. MVC 패턴
애플리케이션의 구성 요소를 Model, View, Controller 3가지 역할로 구분하여, 각 구성요소에 집중해서 개발할 수 있도록 하는 패턴입니다.
재사용성 및 확장성이 용이합니다.
Model
애플리케이션의 데이터베이스, 상수, 변수 등을 말합니다.
View
inputBox, checkBox, textArea 등 사용자 인터페이스 요소를 말합니다.
모델이 가지는 정보를 따로 저장하지 않아야 합니다.
Controller
Model과 View를 잇는 다리 역할을 하며, 이벤트 등 메인 로직을 담당합니다. Model과 View의 생명주기도 관리하고, 변경을 감지하면 각 구성요소에 해당 내용을 알리기도 합니다.
MVC 패턴을 이용하는 대표적인 프레임워크로 Spring이 있습니다.