ݺߣ

ݺߣShare a Scribd company logo
백엔드 스터디
디자인패턴
참고 도서
Head First Design Patterns자바 객체지향 디자인 패턴 객체 지향과 디자인 패턴
싱글턴 패턴
싱글턴 패턴
● 싱글턴 패턴 정의
○ 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근
할 수 있도록 하기 위한 패턴
● 싱글턴 패턴언재 사용 하나?
○ 설정 정보를 저장하고 있는 객체나, 프린터나 그래픽 카드와 같은 디바이스 드라이버와 같은 객
체에 사용 할 수 있다.
싱글턴 패턴 설계
● 기본 설계
Singletone
- instance
+ getInstance()
간단한 싱글턴 만들기
● 간단한 싱글턴 패턴 구현
생성자를 외부에서 호출할 수 없게
간단한 싱글턴 만들기
● Main
싱글턴 패턴 예제
● 프린터 객체를 만들어 사용자 객체가 사용하는 예제
싱글턴 패턴 예제
● 사용자가 프린터 객체를 사용
싱글턴 패턴 예제
● 실행 결과
간단한 싱글턴 문제 발생
● 스레드로 동작하도록 변경
싱글턴 패턴 예제 - 스레드 적용
● 프린트 객체를 만들어 사용하는 예제에 스레드 적용
싱글턴 패턴 예제 - 스레드 적용
● 사용자 클래스에 스레드 적용
싱글턴 패턴 예제 - 스레드 적용
● 실행 결과
싱글턴 패턴 스레드 문제 해결
● 객체를 미리 생성하여 해결 하기
● Synchronized 사용하여 해결 하기
● DCL(Double Checking Locking) 사용하여 해결 하기
미리 싱글턴 객체 생성하기
● 미리 싱글턴 객체 생성하기
○ private static Singleton instance = new Singleton();
● 단점
○ 한번도 호출 하지 않을 경우 메모리 낭비
미리 싱글턴 객체 생성하기 - 프린트 예제
● 프린터 객체 미리 생성하기
미리 싱글턴 객체 생성하기 - 프린트 예제
미리 싱글턴 객체 생성하기 - 프린트 예제
● 미리 프린트 객체 생성 결과
Synchronized 사용 하기
● Synchronized 사용하여 해결 하기
● 단점
○ Synchronized 비용이 비싸다.
○ 자주 호출 되는 경우 성능에 문제 발생 (성능이 100배 정도 저하)
Synchronized 사용 하기 - 프린트 예제
● Synchronized 적용 하기
Synchronized 사용 하기 - 프린트 예제
Synchronized 사용 하기 - 프린트 예제
● Synchronized 적용 결과
DCL(Double Checking Locking) 사용하기
● DCL 사용하기
● Java 1.5이상에서 동작
Volatile
● Volatile 변수를 읽어 들일 때 CPU 캐시가 아니라 메인 메모리부터 읽어들임
출처 : http://thswave.github.io/java/2015/03/08/java-volatile.html
정적 클래스를 사용하기
● 프린터 객체의 print 메소드를 정적으로 만들기
정적 클래스를 사용하기
● 정적 클래스로 사용 하기
정적 클래스를 사용하기
● Interface를 사용할 경우 정적 클래스로 만들기 힘듬
○ 문법 오류 발생
RealPrinter
+ print(String str)
TestPrinter
+ print(String str)
Printer
+ print(String str)
Java에서 싱글턴 패턴 적용 사례
● java.lang.Runtime
○ Java에서 외부 프로세스를 실행할 때 사용
Java에서 싱글턴 패턴 적용 사례
● java.lang.Runtime 코드

More Related Content

Similar to 백엔드 스터디 3주 (12)

이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011
devCAT Studio, NEXON
Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴
Hyunho-Cho
GPG 1.1 객체지향적 프로그래밍과 설계기법
GPG 1.1 객체지향적 프로그래밍과 설계기법GPG 1.1 객체지향적 프로그래밍과 설계기법
GPG 1.1 객체지향적 프로그래밍과 설계기법
Taeung Ra
[Gpg1권 박민근] 1.0 1.4 요약 정리
[Gpg1권 박민근] 1.0 1.4 요약 정리[Gpg1권 박민근] 1.0 1.4 요약 정리
[Gpg1권 박민근] 1.0 1.4 요약 정리
MinGeun Park
이벤트 드리븐.pptx
이벤트 드리븐.pptx이벤트 드리븐.pptx
이벤트 드리븐.pptx
MUUMUMUMU
Stonze study week1
Stonze study week1Stonze study week1
Stonze study week1
Injae Lee
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 C
Heesuk Kang
V8 engine internal
V8 engine internalV8 engine internal
V8 engine internal
Jinhyuck Kim
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
진현 조
자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션
Choonghyun Yang
이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011
devCAT Studio, NEXON
Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴
Hyunho-Cho
GPG 1.1 객체지향적 프로그래밍과 설계기법
GPG 1.1 객체지향적 프로그래밍과 설계기법GPG 1.1 객체지향적 프로그래밍과 설계기법
GPG 1.1 객체지향적 프로그래밍과 설계기법
Taeung Ra
[Gpg1권 박민근] 1.0 1.4 요약 정리
[Gpg1권 박민근] 1.0 1.4 요약 정리[Gpg1권 박민근] 1.0 1.4 요약 정리
[Gpg1권 박민근] 1.0 1.4 요약 정리
MinGeun Park
이벤트 드리븐.pptx
이벤트 드리븐.pptx이벤트 드리븐.pptx
이벤트 드리븐.pptx
MUUMUMUMU
Stonze study week1
Stonze study week1Stonze study week1
Stonze study week1
Injae Lee
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 C
Heesuk Kang
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
진현 조
자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션
Choonghyun Yang

백엔드 스터디 3주