Java

패턴

햄발자 2024. 7. 3. 16:37

 

 

싱글톤 패턴

package useful.ch04;

/**
 * 디자인 패턴 살펴 보기 
 * - 싱글톤 패턴이 뭘까? 
 * 
 * 1. 생성자를 priavte 으로 만든다.
 * 2. static 변수를 활용해서 내부에서 객체를 생성하고 주소값을 할당
 * 3. 외부에서 유일하게 참조할수 있는 public 메서드를 제공한다.   
 */
public class Company {

	//2. static 변수 활용 데이터 타입 선언  
	private static Company company;
	
	// 1. 생성자에 접근제어 지시자를 private 로 변경하면
	// 외부에서 기본 생성자를 호출 할 수 없다. 
	private Company() {	}
	
	//3. 외부에서 접근 가능한 메서드를 만들어 준다. 
	public static Company getInstance() {
		if(company == null) {
			company = new Company();
		}
		return company; 
	}	
}

package useful.ch04;

public class CompanyTest {

	public static void main(String[] args) {
		 
		// 생성 불가 
		//Company company = new Company();
		
		// 고민! Company 객체를 어떻게 접근 할 수 있을까?

		// A클래스에서 활용 
		Company company = Company.getInstance();
		System.out.println(company);
		
		// B클래스에서 활용 
		Company company2 = Company.getInstance();
		System.out.println(company2);
		
		
	} // end of main 

} // end of class 

 

 

 


 

 

템플릿 메서드 패턴

 

추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 패턴을 말한다.

 

 

 

 

package useful.ch04;

public abstract class Car {

	void startCart() {
		System.out.println("시동을 켭니다");
	}
	
	abstract void drive();
	
	abstract void stop();
	
	void turnOff() {
		System.out.println("시동을 끈다");
	}
	
	// 템플릿 메서드 패턴에 핵심 !!
	// 메서드 앞에 final 키워드를 사용하다면 : 하위 클래스에서 재정의 할 수 없다. 
	final void run() {
		// 실행에 흐름 만들어 보기
		startCart();
		drive();
		stop();
		turnOff();
	}
	
}

package useful.ch04;

public class AICar extends Car {

	@Override
	void drive() {
		System.out.println("AI car 자율주행을 합니다.");
		System.out.println("스스로 방향을 바꿉니다");
	}

	@Override
	void stop() {
		System.out.println("자동으로 자동차를 멈춥니다");
		System.out.println("위험을 감지해서 급제동을 합니다");
	}

}

package useful.ch04;

public class ManualCar extends Car {

	@Override
	void drive() {
		System.out.println("사람이 운전을 합니다");
	}

	@Override
	void stop() {
		System.out.println("브레이크를 밟아서 정지를 합니다");
	}

}