본문 바로가기

JAVA/DAY 13 _ 23.09.04

싱글톤 패턴

public static void main(String[] args) {

    SomeComponent sc1 = SomeComponent.getInstance();			// 첫번째 instance 호출시에만 instance가 호출되고, 그 후에는 항상 같은 인스턴스를 반환 ★★★
    sc1.test();

    SomeComponent sc2 = SomeComponent.getInstance();
    sc2.test();


    // Component클래스
    // 네이버처럼 수십년동안 다양한 사람들이 하나의 거대한 .코드를 유지/보수 해야할 때


    // =====================================

    // 싱글톤

    // System a = new System();			--> 이걸 쓰지 못한다는 이야기
    // System 클래스의 생성자는 private으로 선언되어 있어 직접 인스턴스를 생성할 수 없음
    // 따라서 위와 같이 new 연산자를 사용하여 System 클래스의 인스턴스를 생성하려고 하면 컴파일 오류가 발생!
    // System 클래스는 정적 메서드와 필드로 구성되어 있으며, 인스턴스 생성 없이도 이를 사용할 수 있음 (앞의 static같은 느낌?)
}

 

// 싱글톤(디자인 패턴) : 어떤 클래스가 단 하나의 인스턴스만을 가지도록 보장하는 패턴
//  --> 생성자를 private으로 만들어 외부에서 인스턴스 생성을 막음
// 오직 하나의 인스턴스만을 가짐

// --> 이 인스턴스는 애플리케이션 내에서 전역적으로 접근 가능하며, 여러 곳에서 생성되지 않음

class SomeComponent{

private static SomeComponent instance = new SomeComponent();	// 클래스의 생성과 동시에 선언됨
// 1) 클래스 내에서 유일한 인스턴스를 저장하기 위한 private 정적 변수를 선언


private SomeComponent(){		// 이 클래스는 이제 절대! new로 호출이 안된다.
                                        // SomeComponent getInstance로만 호출 가능해짐
}											
// 2) 생성자를 private으로 선언하여 외부에서 객체 생성을 막는다.
// 이렇게 하면 클래스 외부에서 new SomeComponenent()와 같이 직접 객체를 생성할 수 없다!!!


public static final SomeComponent getInstance() {		// ★★★★ 호출방법 : 클래스명.getInstance

//	if (instance == null) {
//	instance = new SomeComponent();				// 90년대 방법. 요즘은 final
//	}

    return instance;
}


// 3) getInstance 메서드는 클래스의 유일한 인스턴스를 생성하거나
//    이미 생성된 인스턴스를 반환하는 역할을 함
//    이 메서드는 클래스 메서드로서, '클래스 이름을 통해 호출할 수 있다!!!'




// 일반적인 코드

private int v1;

public void test() {

    System.out.println(v1);

}

}

'JAVA > DAY 13 _ 23.09.04' 카테고리의 다른 글

Star UML  (0) 2023.09.11
Class review  (0) 2023.09.11
final  (0) 2023.09.04
static 2  (0) 2023.09.04
method 오버로딩 & static변수  (0) 2023.09.04