본문 바로가기

Java

디자인 패턴(Design Pattern)

디자인패턴이란?

 

- 소프트웨어 공학에서 프로그램 개발 시 자주 만나게되는 문제 상황에 대한 일반적이고 재사용 가능한 추상화된 해결책이다.(문제 해결을 위해 Best Practice화 했다고 정의할 수도 있다.)

 

- 소프트웨어 공학적으로 패러다임 & 알고리즘과는 다르다.

 

- 다수의 구체적인 상황이나 알고리즘이 아닌, 일반화된 해결책이다.

 

 

[1] 싱글턴 패턴

어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴

 

하나의 인스턴스를 메모리에 등록하여 여러 쓰레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 합니다.

 

인스턴스를 여러개 만들게 되면 자원을 낭비하게 되거나 버그를 발생시킬 수 있는 것을 방지할 수 있다.

 

 

(1) SingletonClass.java

public class SingletonClass {
	
	private static SingletonClass SINGLETON_CLASS_INSTANCE = new SingletonClass();
	public int i = 10;
	
	private SingletonClass() {}
	
	public static SingletonClass getSingletonClass() {
		if(SINGLETON_CLASS_INSTANCE == null) {
			SINGLETON_CLASS_INSTANCE = new SingletonClass();
		}
		return SINGLETON_CLASS_INSTANCE;
	}
	
	public int getI() {
		return i;
	}
	
	public void setI(int i) {
		this.i = i;
	}
}

 

위 처럼 싱글턴 클래스를 구현하여 i의 초기값은 10으로 세팅하고 간단한 getter/setter를 만들어주었다.

 

 

(2) FirstClass.java / SecondClass.java

public class FirstClass {
	public FirstClass() {
		SingletonClass singletonClass = SingletonClass.getSingletonClass();
		System.out.println("FirstClass");
		System.out.println("i= "+singletonClass.getI());
		
		singletonClass.setI(200);
		System.out.println("i= "+singletonClass.getI());
	}
	
}


public class SecondClass {
	public SecondClass() {
		SingletonClass singletonClass = SingletonClass.getSingletonClass();
		System.out.println("SecondClass");
		System.out.println("i= "+singletonClass.getI());
	}
	
}

 

싱글턴 클래스의 getSingletonClass() 메소드로 불러 하나의 인스턴스를 등록하여 출력하고 200으로 set하여 테스트합니다.

 

 

 

(3) MainClass

public class MainClass {

	public static void main(String[] args) {
		FirstClass firstClass = new FirstClass();
		SecondClass secondClass = new SecondClass();
		
	}

}

메인 클래스 실행 결과 아래와 같이 초기에는 10이 나오지만 FirstClass에서 200으로 설정했고 싱글턴은 하나의 인스턴스만을 만들기 때문에 SecondClass에서도 설정된 200이 출력되는 것을 볼 수 있습니다.

 

728x90
반응형