studyplan

싱글톤 패턴 (Singleton pattern) - java 자바 /만드는 방법 ,만드는 이유 / 본문

자바정리

싱글톤 패턴 (Singleton pattern) - java 자바 /만드는 방법 ,만드는 이유 /

무한머니 2022. 7. 12. 17:10

싱글톤 패턴 (Singleton pattern) 만드는 방법 

Speaker 타입의 싱글톤패턴의 ccmSpeaker 을 만드는중 ~~ 

 

package basic;
public class Speaker {
    private static Speaker ccmSpeaker; // 유일한 Speaker 타입의 ccmSpeaker ccm스피커 ;
    private int volume;
    private Speaker() { volume = 6;}
    public static Speaker getCcmSpeaker() {
        // 이렇게 만드는 이유는
//       무분별한 new Speaker(); 사용을 막기 위해서 , 하나의 객체만 사용하기 위해서
        // 이렇게 만들면
        //getCcmSpeaker() 이걸 사용해야지만 만들수 있다
        if (ccmSpeaker == null) {
            ccmSpeaker = new Speaker();
        }
        return ccmSpeaker;
    }
    public int getVolume() {
        return volume;
    }
    public void setVolume(int volume) {
        this.volume = volume;
    }
}

 

// 싱글톤으로 잘 만들어져있는지 확인하는 테스트 클래스 

 

 

package basic;
public class SpeakerTest {
    public static void main(String[] args) {
//        Speaker ccmspeaker = new Speaker(); // 이거 안됨
        Speaker ccmSpeaker1 = Speaker.getCcmSpeaker();
        Speaker ccmSpeaker2 = Speaker.getCcmSpeaker();
//        여기서 기대할 점은  ?
//                ccmSpeaker1 = ccmSpeaker2 같다는 점이다
        // 유일하게 만들었기 때문에 둘은 같을수밖에 없다
        System.out.println(ccmSpeaker1.getVolume());
        System.out.println(ccmSpeaker2.getVolume());
        ccmSpeaker1.setVolume(44);
        System.out.println(ccmSpeaker1.getVolume());
        System.out.println(ccmSpeaker2.getVolume());
//        ccmSpeaker1 볼륨값을 44 로 세팅해도 ccmSpeaker1 와 ccmSpeaker2 는 같기때문에
//        둘다 볼륨은 44 로 나온다
        ccmSpeaker2.setVolume(55);
        System.out.println(ccmSpeaker1.getVolume());
        System.out.println(ccmSpeaker2.getVolume());
    // 마찬가지로  ccmSpeaker1 와 ccmSpeaker2 는 같기때문에
        // ccmSpeaker2 에 볼륨을 55 로 세팅해도
//        ccmSpeaker1 와 ccmSpeaker2 의 볼륨값은 55 이다

    }

}

 

싱글톤 만드는 이유 >? 

 

1. 싱글톤을 만듦으로써 

Speaker 객체는 1개로 통일 된다 

 

2. 무분별한 객체 생성을 막을 수 있다 

 

ccmSpeaker1 와 ccmSpeaker2 의 주소값이 같다 = 고로 ccmSpeaker1 과 ccmSpeaker2는 같은 객체이다 !! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments