싱글톤

프로그래밍/Java 2019. 12. 18. 21:48

싱글톤 패턴

싱글톤이란 디자인패턴 중에 하나이다.

객체지향 언어에서는 하나의 객체에 여러개의 인스턴스를 생성할 수 있다.

만약 '회사원' 이라는 객체가 있으면 이것에 대한 인스턴스를 여려명 생성할 수 있는 것이다. 한 회사에 사원은 여러명이다.

그런데 회사는 여러개 있으면 안된다. 뭔가 설명이 애매하긴 하지만, 결국은 여러개의 인스턴스가 생성 되는걸 방지하기 위해 싱글톤 패턴을 사용한다.


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 는 같은 주소를 가지고 있기에 언제 어디서나 그 값은 제일 마지막에 셋팅한 값이 출력된다.

'프로그래밍 > Java' 카테고리의 다른 글

내부 클래스  (0) 2019.12.25
Map  (0) 2019.12.20
Set  (0) 2019.12.17
컬렉션 프레임워크  (0) 2019.12.14
제네릭  (0) 2019.12.14
블로그 이미지

파니동

,