백엔드 스터디 3주

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 코드