강의 소개
현재 수강하고 있는 멀티캠퍼스 k-digital 지능형 웹서비스 풀 스택 과정을 수강하며 적은 내용입니다.
교재로는 자바의 정석을 사용하고 있습니다.
싱글톤(Singleton)
싱글톤은 디자인 패턴 중의 하나로, 여러 번 생성자를 호출해도 단 한 개의 인스턴스만 만들도록 강제하는 것이다.
메모리에 불필요한 인스턴스들이 생성되어 메모리가 낭비되는 것을 막아주고, 외부에서 동일 인스턴스를 계속 공유해서 사용할 수 있게 해 준다.
구현 코드
class Singleton {
static private Singleton me = new Singleton(); // 2번.
private Singleton() { // 1번.
System.out.println("Singleton 생성자 호출");
}
static Singleton getInstance() { // 3번.
return me;
}
}
1번 코드부터 3번 코드로 싱글톤을 순차적으로 이해할 수 있다.
우선, 1번 코드에서 생성자에 private을 붙여 다른 클래스에서 new 연산자로 생성자를 호출하지 못하도록 제한하였다.
private은 내부 클래스에서만 접근할 수 있는 제어자이기 때문에 내부 클래스에서만 인스턴스를 생성할 수 있게 한다.
2번 코드에서는 내부 클래스에서만 호출할 수 있는 1번의 생성자를 호출한 코드이다.
이로써 1개의 인스턴스가 생성되었고, 생성된 인스턴스에 static을 붙임으로써 run을 할 때 가장 먼저 메모리에 할당되어 공유될 수 있게 된다. 또한, private을 붙여 필드를 외부에서 변경할 수 없게 했다.
마지막 코드 3번이다. getInstance메서드는 앞서 생성된 1개의 인스턴스를 리턴해준다.
getInstance메서드에서는 static을 붙여두었는데, 앞선 코드에서 외부에서 이 클래스의 생성자를 호출하지 못하게 하여, 인스턴스를 생성하지 못하게 했다. 생성자 호출이 불가하기에 getInstance메서드를 외부에서 사용하기 위해서 static을 붙이는 것이다.
외부에서 인스턴스를 받을 수 있는 방법은 오로지 이렇게 getInstance메서드를 호출하는 방법뿐이다.
// 외부 클래스에서 getInstance메서드를 호출
public class SingletonTest {
public static void main(String[] args) {
// Singleton s1 = new Singleton(); // private 이라서 호출 불가
// "Singleton 생성자 호출" 출력이 1번만 된다.
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2 ) {
System.out.println("s1 주소:" + s1 + "와 s2의 주소:" + s2);
System.out.println("같은 인스턴스입니다.");
}
// s1, 2는 모두 같은 인스턴스이다.(= 동일한 인스턴스를 참조한다. 주소도 같다.)
}
}
코드와 같이 외부에서 몇 번이고 getInstance메서드를 호출해도 같은 인스턴스를 보여줄 것이다. 그리고 당연히 같은 인스턴스이기에 그 인스턴스의 주소도 모두 같다.
출처: 자바의 정석(남궁 성 저), 멀티캠퍼스
참고자료: 이것이 자바다(신용권 저)
'교육, 학습 > 멀티캠퍼스_풀 스택' 카테고리의 다른 글
JAVA 문법 - 변수(= 필드)의 종류 (0) | 2022.01.17 |
---|---|
JAVA 문법 - ArrayList와 LinkedList(메모리 측면 비교) (0) | 2022.01.17 |
JAVA 문법 - 컬렉션 프레임워크(java.util 패키지) (0) | 2022.01.14 |
JAVA 문법 - 자바 API(java.lang의 StringBuffer, String, Object클래스) (0) | 2022.01.13 |
JAVA 문법 - StringBuffer클래스 사용 이유(String과 비교) (0) | 2022.01.13 |
댓글