싱글톤 패턴
싱글톤이란 디자인패턴 중에 하나이다.
객체지향 언어에서는 하나의 객체에 여러개의 인스턴스를 생성할 수 있다.
만약 '회사원' 이라는 객체가 있으면 이것에 대한 인스턴스를 여려명 생성할 수 있는 것이다. 한 회사에 사원은 여러명이다.
그런데 회사는 여러개 있으면 안된다. 뭔가 설명이 애매하긴 하지만, 결국은 여러개의 인스턴스가 생성 되는걸 방지하기 위해 싱글톤 패턴을 사용한다.
Compony 클래스
package designPattern;
public class Compony {
private int componyCode; // 사번
private String memberName; // 이름
private static Compony instance = new Compony();
private Compony() {}
public static Compony getInstance() {
if(instance == null) {
instance = new Compony();
}
return instance;
}
public int getComponyCode() {
return componyCode;
}
public void setComponyCode(int componyCode) {
this.componyCode = componyCode;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public void showComponyInfo() {
System.out.println("componyCode=" + componyCode + ", "+ "memberName=" + memberName);
}
}
- 기본 생성자의 접근을 막아버렸다 (private)
- Compony객체에 대한 인스턴스(주소)를 메모리에 올려버리고 이 객체에 대한 인스턴스는 항상 동일하다.
테스트
package designPattern;
public class ComponyTest {
public static void main(String[] args) {
Compony myCompony1 = Compony.getInstance();
Compony myCompony2 = Compony.getInstance();
System.out.println(myCompony1 == myCompony2) ; // 이 둘의 주소는 같다.
myCompony1.setComponyCode(91241231);
myCompony1.setMemberName("임꺽정");
myCompony1.showComponyInfo();
myCompony2.setComponyCode(1241231);
myCompony2.setMemberName("홍길동");
myCompony2.showComponyInfo();
System.out.println("=========================================================");
myCompony1.showComponyInfo();
}
}
- getInstance 메서드가 static 으로 선언되있기에 new 없이 바로 사용할 수 있다.
- myCompony1 과 myCompony2 는 동일한 인스턴스 주소를 같는다.
- myCompony1, myCompony2 각각 다르게 변수를 세팅하였다.
- 그런데 맨 마지막 부분에 myCompony1 의 변수들을 출력하니, myCompony2 에서 세팅한 값들이 출력되었다.
- 이 이유는 myCompony1 와 myCompony2 는 같은 주소를 가지고 있기에 언제 어디서나 그 값은 제일 마지막에 셋팅한 값이 출력된다.