View
113
Download
0
Category
Preview:
Citation preview
백엔드스터디디자인패턴
참고도서
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 코드
Recommended