안녕하세요 풀스택개발자를 꿈꾸는 진쓰입니다.
디자인패턴 - 싱글톤 패턴 포스팅 시작하겠습니다.
부족한부분은 포스팅 밑부분, 싱글톤 패턴 영상으로 보충하실수있습니다.
의도
=> 클래스를 생성하는 인스턴스가 오직하나여야 한다.
인스턴스 접근 혹은 생성 역시 한가지의 방식으로만 제공하여 오직,
하나의 인스턴스만 생성하고 이용할수 있게된다.
활용
- 클래스 인스턴스가 오직하나여야함을 필요로 하는곳에 활용할 수 있습니다.
- 모든 클라이언트가 하나의 인스턴스만 사용해야하는 경우에 활용할 수 있습니다.
싱글톤 패턴 만드는 방법! 딱 3가지만 숙지하시면 됩니다.
1. private 생성자 선언 합니다. 2. private static 인스턴스 변수 선언 합니다. 3. public static getInstance() method 구현 해야합니다. |
예제 코드로 살펴보시겠습니다.
예제상황: 안드로이드 시스템에서 스피커객체는 유일하게 하나만 존재해야 하며,
스피커의 객체에서 attribute값 중하나인 시스템사운드 크리를 읽어 오려한다.
시스템 스피커의 클래스 선언부입니다.
SystemSpeaker.java |
public class SystemSpeaker { //원래는 private, getter, setter 필요. 편의상. public int systemVol = 5; //2. private static 인스턴스 변수 private static SystemSpeaker ss = new SystemSpeaker(); //3.public static getInstance() method 구현. public static SystemSpeaker getInstance(){ //if(ss==null){ // ss = new SystemSpeaker(); //} return ss; } //1.private 생성자. private SystemSpeaker(){ } //4.다양한 방법 존재. /* * 시작과 동시에 객체를 생성할것인가 혹은, 프로그램 러닝중에 객체를 생성할 것인가. * * */ } |
위와 같이 SystemSpeaker.java 를 생성하면, 자바 가상머신이 시작할때 바로 객체가 미리 생성하고 프로그램이 시작된다.
아래와같이 SystemSpeaker.java를 생성하면 프로그램이 실행중에 객체를 1번 생성하게된다. (필요할때 생성하는 방식)
어느것을 선택할지는 개발자 몫이다.
SystemSpeaker.java |
public class SystemSpeaker { public int systemVol = 5; //2. private static 인스턴스 변수 private static SystemSpeaker ss; //3.public static getInstance() method 구현. public static SystemSpeaker getInstance(){ if(ss==null){ ss = new SystemSpeaker(); } return ss; } //1.private 생성자. private SystemSpeaker(){ } } |
.
스피커 객체를 생성하고 값을 읽어오는 메인부입니다.
Main.java |
public class Main { public static void main(String[] args) { //객체1생성 //SystemSpeaker ss = new SystemSpeaker(); SystemSpeaker ss1 = SystemSpeaker.getInstance(); //객체2생성 SystemSpeaker ss2 = SystemSpeaker.getInstance(); //객체의 주소 비교. System.out.println(ss1); System.out.println(ss2); //객체의 attribute값 읽어오기. System.out.println(ss1.systemVol); System.out.println(ss2.systemVol); } } |
객체의 주소를 비교해본 결과, 같은 객체임을 알수있다.
정리
- 유일하게 존재하는 인스턴스 접근을 통제하고자 할 때 사용하면 됩니다.
- 싱글톤 패턴을 사용하면 인스턴스가 오직한개이기때문에 변수영역을 줄일 수 있습니다.
정독해주셔서 감사합니다. :)
'소프트웨어공학 > 디자인패턴 - JAVA' 카테고리의 다른 글
추상 팩토리 패턴 (Abstract factory pattern) (0) | 2020.05.09 |
---|---|
전략 패턴 Strategy pattern (0) | 2017.06.10 |
어댑터 패턴 Adapter Pattern (0) | 2017.06.10 |
상태패턴 State Pattern (0) | 2017.06.10 |
팩토리 메소드 Factory method (0) | 2017.06.10 |