티스토리 뷰
싱글톤 패턴이란 ?
특정 클래스에 대해 객체의 인스턴스가 heap 메모리에 단 하나만 존재할 수 있도록 해주는 패턴
코드로 이해하기
비교를 위한 Normal 클래스
public class Normal {
public Normal() {
System.out.println("Normal 인스턴스 생성");
}
}
Singleton 클래스
public class Singleton {
private static Singleton singleton; // 2.
private Singleton() {} // 1.
public static Singleton getInstance() { // 3.
if(singleton == null) { // 인스턴스가 아직 안 만들어졌다면,
singleton = new Singleton();
System.out.println("Singleton 인스턴스 생성");
} else {
System.out.println("Singleton 인스턴스 이미 존재");
}
return singleton;
}
1. 생성자를 외부에서 직접 호출할 수 없도록 private으로 선언합니다.
2. 인스턴스를 저장하기 위한 변수를 static으로 선언하여 메모리에 단 한 번만 할당할 수 있도록 만듭니다.
3. getInstance() 메소드를 통해 인스턴스가 heap 메모리에 존재하는지 확인합니다.
만일 존재하지 않으면 생성하고, 이미 존재한다면 만들어져 있는 주소값을 리턴합니다.
메인 함수에서 객체 생성하기
// 메인함수
Normal n1 = new Normal();
Normal n2 = new Normal();
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
이 때, Singleton 클래스는 new 연산자를 사용하여 객체를 생성할 수 없습니다.
결과를 보면,
Normal 클래스는 객체를 생성할 때마다 인스턴스가 생성이 되지만
Singleton 클래스는 인스턴스를 한 번 생성하면 더 이상 생성하지 않습니다.
hashCode() 메소드를 통해 주소값을 확인해보면,
싱글톤 패턴을 사용하는 이유 ?
-
단 한번만 인스턴스를 생성하기 때문에 메모리의 낭비를 줄일 수 있습니다.
-
전역 메소드로 호출하기 때문에 다른 클래스에서 사용하기 쉽습니다.
-
공통된 객체를 사용해야 하는 프로그래밍에서 매번 객체를 생성하지 않고 같은 객체를 사용하도록 하여 성능을 높일 수 있습니다.
'JAVA > 이론' 카테고리의 다른 글
[JAVA] [OOP] Object Oriented Programming (객체 지향 프로그래밍) 이란 ? (2) | 2019.11.27 |
---|---|
[JAVA] JAVA의 프로그래밍 과정 / JVM의 메모리 구조 - stack , heap , static (0) | 2019.11.27 |
[JAVA] static 변수와 static 메소드 (0) | 2019.11.27 |
[JAVA] 배열 ( Array ) 사용하기 - 선언 , 초기화 , 출력 , 복사 (0) | 2019.11.27 |
[JAVA] method (메소드 / 메서드) - public , protected , default , private , static , non-static (1) | 2019.11.18 |