https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4#
자바 디자인 패턴의 이해 - Gof Design Pattern - 인프런
자바 디자인 패턴 이해하기 강좌 입니다. 여러가지 디자인 패턴들을 알아보며 디자인 패턴에 대한 이해도를 높이도록 도와줍니다. Gof Design Pattern을 자바 언어로 설명한 강의. 의미 있고 쉬운 예제를 준비하려고 노력했습니다. 중급 프로그래밍 언어 Java MVC 온라인 강의 자바 디자인 패턴
www.inflearn.com
용어 정리
객체 : 속성과 기능을 갖춘 것
클래스 : 속성과 기능을 정의한 것
인스턴스 : 속성과 기능을 가진 것 중 실체 하는 것(메모리 상에 올라간 것)
싱글톤 패턴이란?
객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
예를 들면, 데이터베이스 접속을 위한 객체를 생성해야 하는데 쿼리를 작성할 때마다 객체를 계속 생성하면
메모리 낭비가 발생하므로 하나의 객체를 생성 후 그 객체를 계속 이용하면 메모리를 효율적으로 이용할 수 있다.
싱글톤 패턴의 문제점
싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙"을 위배하게 된다. (=객체 지향 설계 원칙에 어긋남)
따라서 수정이 어려워지고 테스트하기 어려워진다.
또한 멀티스레드 환경에서 동기화 처리를 안 하면 인스턴스가 두 개가 생성된다든지 하는 경우가 발생할 수 있음
학습목표
싱글톤 패턴을 통해서 하나의 인스턴스만 생성하도록 구현
요구사항
개발 중인 시스템에서 스피커에 접근할 수 있는 클래스를 만들어 주세요.
SystemSpeaker.java
public class SystemSpeaker {
static private SystemSpeaker instance;
private int volume; // 볼륨값
private SystemSpeaker() {
volume = 5; // 기본값 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;
}
}
Main.java
public class Main {
public static void main(String[] args) {
SystemSpeaker speaker1 = SystemSpeaker.getInstance(); // 새로 생성 이라고 나옴
SystemSpeaker speaker2 = SystemSpeaker.getInstance(); // 이미 생성이라고 나옴
// 5, 5
System.out.println(speaker1.getVolume());
System.out.println(speaker2.getVolume());
//11, 11
speaker1.setVolume(11);
System.out.println(speaker1.getVolume());
System.out.println(speaker2.getVolume());
// 22, 22
speaker2.setVolume(22);
System.out.println(speaker1.getVolume());
System.out.println(speaker2.getVolume());
}
}
참고
https://gmlwjd9405.github.io/2018/07/06/singleton-pattern.html
[Design Pattern] 싱글턴 패턴이란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
https://jeong-pro.tistory.com/86
싱글톤 패턴(Singleton pattern)을 쓰는 이유와 문제점
싱글톤 패턴(Singleton Pattern) 싱글톤 패턴 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴. 생성자가 여러 차례 호출되더..
jeong-pro.tistory.com
소스코드
https://github.com/garam-park/java-designpattern
garam-park/java-designpattern
Java Design Patter Example for Coders in korean. Contribute to garam-park/java-designpattern development by creating an account on GitHub.
github.com
'Java > design pattern' 카테고리의 다른 글
[java] 7강 빌더 패턴(Builder Pattern) (0) | 2020.02.03 |
---|---|
[java] 6강 프로토 타입 패턴(Prototype Pattern) (2) | 2020.01.22 |
[java] 4강 팩토리 메소드 패턴(Factory Pattern) (0) | 2020.01.22 |
[java] 3강 템플릿 메소드 패턴(Template Method Pattern) (0) | 2020.01.13 |
[java] 2강 어댑터 패턴(adapter pattern) (0) | 2020.01.13 |