본문 바로가기

JAVA/DAY 13 _ 23.09.04

Single Tone Pattern

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

// (앞의 static같은 느낌?)

 

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

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


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

 

// 싱글톤(디자인 패턴) : 어떤 클래스가 단 하나의 인스턴스만을 가지도록 보장하는 패턴
//  --> 생성자를 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 메서드는 클래스의 유일한 인스턴스를 생성하거나
   	 // 이미 생성된 인스턴스를 반환하는 역할을 함
	// 이 메서드는 클래스 메서드로서, '클래스 이름을 통해 호출할 수 있다!!!'

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

Annotation  (0) 2023.09.11
folder  (0) 2023.09.11
Final  (0) 2023.09.11
Static2  (0) 2023.09.11
Static  (0) 2023.09.11