싱글톤 패턴(Singleton Pattern)

basic

시작에 앞서

객체란?

  • 객체 : 속성과 기능을 갖춘 것
  • 클래스 : 속성과 기능을 정의한 것
  • 인스턴스 : 속성과 기능을 가진 것 중 실제하는 것

학습목표

싱글톤 패턴을 통해서 하나의 인스턴스만 생성하도록 구현 할 수 있다.

사전적 의미 Singleton이란?

외동이, 한개의 것, 한장

Singleton Pattern

하나만 생성해야할 객체를 위한 패턴

요구 사항

개발 중인 시스템에서 스피커에 접근 할 수 있는 클래스를 만들어 주세요.

스피커를 여러 클래스에서 접근하면 만약 볼륨1만 올려도 여러클래스를 다 찾아다니며 볼륨을 바꿔줘야한다.

소스코드


public class SystemSpeaker {

    static private SystemSpeaker instance;

    private int volume;

    private SystemSpeaker() {
        volume = 5;
    }

    public static SystemSpeaker getInstance() {
        if(instance == null) {
            // 시스템 스피커
            instance = new SystemSpeaker();
        }
        return instance;
    }

    public int getVolume() {
        return volume;
    }

    public void setVolume(int volume) {
        this.volume = volume;
    }
}


-------------------------------

public class Main {
    public static void main(String[] args) {
        SystemSpeaker systemSpeaker1 = SystemSpeaker.getInstance();
        SystemSpeaker systemSpeaker2 = SystemSpeaker.getInstance();

        System.out.println(systemSpeaker1.getVolume()); // 5
        System.out.println(systemSpeaker2.getVolume()); // 5

        systemSpeaker1.setVolume(11);

        System.out.println(systemSpeaker1.getVolume()); // 11
        System.out.println(systemSpeaker2.getVolume()); // 11

        systemSpeaker2.setVolume(22);

        System.out.println(systemSpeaker1.getVolume()); // 22
        System.out.println(systemSpeaker2.getVolume()); // 22

    }
}


추가사항

인스턴스를 호출 할 때 로그를 찍어주는 소스를 추가

public class SystemSpeaker {

    static private SystemSpeaker instance;

    private int volume;

    private SystemSpeaker() {
        volume = 5;
    }

    public static SystemSpeaker getInstance() {
        if(instance == null) {
            // 시스템 스피커
            instance = new SystemSpeaker();
            System.out.println("새로 생성");
        } else {
            System.out.println("이미 생성");
        }
        return instance;
    }

    public int getVolume() {
        return volume;
    }

    public void setVolume(int volume) {
        this.volume = volume;
    }
}


효준's profile image

효준

2019-04-30 13:00

다른글 보러가기

마이크로 서비스 아키텍처 MSA(Micro Service Architecture) - 1

이전 포스트

프로토타입 패턴(Prototype Pattern)

다음 포스트