본문 바로가기

자바

18. 패턴을 이용한 객체 지향 이해하기(싱글톤)

패턴이란 개발 단계에서 빠르게 개발하고, 유지 보수 측면에서 효율적으로 개발 할 수 있게 효율을 극대화한 방법들을 틀로 정해놓은 것이다. 패턴을 제대로 공부하는 것은 어렵다. 각각의 개발자가 자신의 코드를 관찰하고 리팩토링하면서 패턴에 익숙해져야 한다.

 

첫번째 패턴으로 싱글턴 패턴을 알아보자. 싱글턴 패턴은 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴이다. 싱글턴 패턴을 이용하면 클래스 하나에 객체를 유일하게 하나만 생성하여 모든 곳에서 하나의 객체에만 접근할 수 있도록, 즉 전역의 개념으로 객체를 사용할 수 있다.

 

package com.singleton;

public class FirstSingleton {
	private static FirstSingleton SINGLE = new FirstSingleton(); //나의 클래스 변수에 내가 직접 객체를 생성
	public int i = 10;
	
	private FirstSingleton() {} //생성자를 private으로 선언하여 외부에서 접근을 제한
	
	public static FirstSingleton getFirstSingleton() {
		if(SINGLE == null) { //객체가 생성이 안 되어있으면
			SINGLE = new FirstSingleton(); //객체를 생성한다.
		}
		
		return SINGLE; //만들어진 객체 반환, 이미 객체가 생성되었으면 그 객체를 반환
	}
	
	public int getI() {
		return i;
	}
	
	public void setI(int i) {
		this.i = i;
	}
}

 

package com.singleton;

public class FirstClass {
	public FirstClass() {
		FirstSingleton FS = FirstSingleton.getFirstSingleton(); //생성자가 private으로 선언되어 클래스명을 이용하여 static함수 호출
		System.out.println("FirstClass");
		System.out.println("i = " + FS.getI());
		FS.setI(200);
		System.out.println("i = " + FS.getI());
	}
}

 

package com.singleton;

public class SecondClass {
	public SecondClass() {
		FirstSingleton FS = FirstSingleton.getFirstSingleton(); //생성자가 private으로 선언되어 클래스명을 이용하여 static함수 호출
		System.out.println("SecondClass");
		System.out.println("i = " + FS.getI());
	}
}

 

package com.singleton;

public class Main {
	public static void main(String[] args) {
		FirstClass F1 = new FirstClass();
		SecondClass F2 = new SecondClass(); //FirstClass의 객체를 가지고 있다.
	}
}