클래스의 인스턴스를 하나만 갖도록 하는 디자인 패턴
private 접근제한자가 있어 new 외부에서 키워드로 인스턴스를 생성할 수 없다.static 메서드인 getInstance 메서드를 통해 이미 만들어진 인스턴스를 받는다.Network DB file system 과 같은 I/O Bound 작업에 많이 사용된다. (데이터베이스 연결 모듈)단위 테스트의 독립성이 확보되지 않아 테스트가 어려워진다.
**구현하기에 따라 테스트만을 위한 초기화 코드가 필요할 수 있다.
구현 방법에 따라 동시성 문제가 발생할 수 있다.
** Java의 경우 synchronized 키워드를 쓰거나 LazyHolder 방식으로 싱글톤 구현시 동시성 문제를 해결할 수 있다.