일종의 소프트웨어 디자인 패턴으로서, 생성자가 여러번 호출되더라도 실제로 생성된 객체는 하나이고,
최초의 생성자가 생성한 객체를 리턴하는 방식 ⇒ 즉, 프로그램 런타임동안 하나의 인스턴스만 사용한다는 의미
- 단일성 : 단일 인스턴스를 사용하기 때문에, 메모리를 효율적으로 사용 가능
- 접근성 : 전역에서 접근할 수 있으므로, 애플리케이션의 모든 부분에서 사용 갸능
- 객체 생성 및 관리가 객체 자체와 긴밀하게 연결되어 의존성 주입이 어려울 수 있다.
싱글톤 인스턴스는 생성자나 다른 메커니즘을 통해 의존성으로 제공 x 시스템의 다른 개체에서 직접 액세스 - 테스트 시에 각 테스트가 독립적으로 실행되어야 하는데, 싱글톤 인스턴스는 전역적으로 사용되므로,
각 테스트시에 독립적인 인스턴스를 만들기 어렵게하므로 테스트 구현에 어려움을 줄 수 있다.
이진코드로 존재하는 실행가능한 파일은 프로그램 → 그 프로그램을 실행하여 메모리에 얹게되면 프로세스
그리고 그 프로세스에서 공유 자원(메모리)를 사용하는 하나의 실행 흐름(단위)는 스레드
이 상황에서 하나의 프로세스가 여러 개의 작업흐름, 즉 여러 개의 스레드를 통해 실행되고 있다면 그것을 멀티 스레딩이라고 할 수 있다.
ex) 크롬 브라우저라는 하나의 프로세스에는 스크롤이라는 스레드, 즐겨찾기라는 스레드, 화면을 출력하는 스레드 등이 있다.