클래스가 오직 하나의 인스턴스만을 생성하도록 보장하고, 그 인스턴스에 대한 전역 접근을 제공하는 디자인 패턴
자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임(바이트 코드를 실행할 때)에 클래스 로드하고 링크하는 특징이 있다.
이 동적 로드를 담당하는 부분이 JVM의 클래스 로더이다.
정리하자면, 자바 클래스들은 한 번에 모든 클래스가 메모리에 올라가지 않는다.
각 클래스들은 필요할 때 애플리케이션에 올라가게 되며, 이 작업을 클래스로더가 해주게 된다.
클래스 로더는 런타임 중에 JVM의 메소드 영역에 동적으로 Java 클래스를 로드하는 역할을 한다.