프로그램을 설계 할 때 생길 수 있는 문제점들을 객체 간의 상호 관계 등을 통해 해결 할 수 있도록 규약 형태로 만들어 둔 것
객체의 인스턴스가 오직 1개만 생성되는 패턴 DB Connection Pool, thread pool, Log 객체 등 하나의 인스턴스를 생성해서 메모리에 등록 후 다른 클래스의 인스턴스들이 데이터를 공유하여 사용 할 수 있도록 개발 하고자 할 때 사용
DB Connection pool = 데이터베이스 연결을 관리하는 것
thread pool = 미리 일정 수의 스레드를 생성해두고, 요청이 있을 때 해당 스레드들을 재사용하여 작업을 처리하는 기법
Log 객체 = 다양한 이벤트나 메시지를 기록하는 데 사용하는 객체
개방 폐쇄 원칙을 위배 할 수 있다는 것→다른 클래스들과의 결합도가 높아짐→유디 보수가 불리,Unit test또한 불리