코드 작성
package ex_static; public class Ex4 { public static void main(String[] args) { /* * 싱글톤 디자인 패턴(Singleton Design Patten) * - 전체 프로그램에서 단 하나의 객체만 만들도록 보장하는 코딩 기법 */ // SingletonClass sc = new SingletonClass(); // // 접근제한자가 private으로 선언된 생성자로써 호출이 불가능하므로 // SingletonClass의 인스턴스 생성이 불가능해짐! // static으로 선언된 정적 멤버변수 instance에 접근하여 // 미리 생성되어 있는 인스턴스를 가져올 수 있다! // SingletonClass sc = SingletonClass.instance; // SingletonClass.instance = null; // => 외부에서 함부로 값을 변경할 수 없도록 private 접근제한자 적용 // 외부에서 접근할 수 있도록 Getter 메서드를 제공하므로 // Getter를 호출하여 생성된 인스턴스를 전달받아 사용할 수 있음 // => static 메서드인 getInstance() 메서드를 호출하여 인스턴스를 리턴 SingletonClass sc = SingletonClass.getInstance(); SingletonClass sc2 = SingletonClass.getInstance(); // sc / sc2 인스턴스의 주소값 확인 System.out.println("sc 인스턴스의 주소값 : " + sc); System.out.println("sc2 인스턴스의 주소값 : " + sc2); System.out.println("sc와 sc2는 같은가 ? " + (sc == sc2)); } } class SingletonClass { // 1. 생성자의 접근제한자를 private으로 선언하여 // 외부에서 인스턴스 생성을 못하도록 제한 private SingletonClass() {} // 2. 자신의 클래스 내에서 직접 인스턴스를 생성하여 참조변수에 저장 // => 이 때, 인스턴스 생성이 불가능하므로 인스턴스 변수 접근 불가능 // 따라서, 인스턴스 생성 없이도 접근 가능하도록 static으로 선언 // => 외부에서 변수에 접근하여 함부로 값을 변경하지 못하도록 접근제한자를 private으로 선언 private static SingletonClass instance = new SingletonClass(); // 3. 인스턴스 생성 후 인스턴스가 저장된 멤버변수도 접근제한자로 인해 외부에서 // 접근이 불가능하므로 대신 인스턴스를 리턴해주는 Getter 메서드 정의(Setter 불필요!) // => 이 때, 인스턴스 생성 없이도 호출 가능하도록 static 으로 선언 public static SingletonClass getInstance() { return instance; } }
싱글톤(Singleton)에 대한 정의와 예시
출력 결과
sc 인스턴스의 주소값 : ex_static.SingletonClass@15db9742
sc2 인스턴스의 주소값 : ex_static.SingletonClass@15db9742
sc와 sc2는 같은가 ? true
나의 소감
싱글톤 -> 하나의 객체
싱글톤 -> 외부에서 인스턴스 생성 불가, 접근불가
싱글톤 -> 싱글톤 클래스 내부에 정의된 getInstance 메서드로 불러오기만 가능
이거 맞니 미래의 '나'야?
'JAVA' 카테고리의 다른 글
싱글톤(Singleton) 활용 | 21/12/30 (0) | 2022.01.11 |
---|---|
상속(Polymorphism) 활용 | 21/12/30 (0) | 2022.01.11 |
static, main, instance 생성 시점 차이 | 21/12/29 (0) | 2022.01.11 |
정적(Static) 메서드 | 21/12/29 (0) | 2022.01.11 |
정적(Static) 멤버 변수 | 21/12/29 (0) | 2022.01.11 |