Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

SCJP. Garbage Collection  Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것.  C++ 에서의 메모리 해제 int* v=new.
Java 로 배우는 디자인패턴 입문 Chapter 15. Facade 간단한 창구 덕성여자대학교 컴퓨터학부.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java로 배우는 디자인패턴 입문 Chapter 22. Command 명령을 클래스로 만든다
- Pipeline Submission : submit - Pipeline 등록 : register
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
5장. 참조 타입.
스레드란? 멀티 태스킹(muli-tasking)는 여러 개의 애플리케이션을 동시에 실행하여서 컴퓨터 시스템의 성능을 높이기 위한 기법 그림23-1. 병철 처리의 예.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
6장. 클래스.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Java로 배우는 디자인패턴 입문 Chapter 17. Observer 패턴 상태의 변화를 통지한다
자바 5.0 프로그래밍.
Java로 배우는 디자인패턴 입문 Chapter 12. Decorator 장식과 내용물의 동일시
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
10장. 예외처리.
자바 5.0 프로그래밍.
11장. 1차원 배열.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
C#.
6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
자바응용.
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Effective Java [Issue 1 and 2]
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 5 장 집합연관, 복합연관, 인터페이스, 실체화 (교재: J. Schmuller 저/곽용재 역, 초보자를 위한 UML 객체지향설계, 제3판, 정보문화사, 2006) 학기 소프트웨어설계.
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
( Windows Service Application Debugging )
Chapter 17. 스레드.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
함수, 모듈.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
발표자 : 이지연 Programming Systems Lab.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Power Java 제23장 스레드.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
7 생성자 함수.
Presentation transcript:

Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스 2004-1

반드시 하나의 인스턴스만 생성되어야 하는 클래스도 있다. 01. Singleton 패턴 프로그램 실행 시, 하나의 클래스에 대한 인스턴스가 보통 여러 개 생성된다. 반드시 하나의 인스턴스만 생성되어야 하는 클래스도 있다. 예: 컴퓨터 자체를 표현한 클래스, 윈도 시스템을 표현한 클래스 이 경우, 프로그래머가 new MyClass( )를 한번만 실행하면 된다. 그러나, 1개의 인스턴스만 생성되도록 프로그램에 표현하고 싶다면, => Singleton 패턴을 사용한다. Chapter 5. Singleton /42

=> 외부에서 생성자를 호출해서 객체를 생성하지 못한다. 02. 예제 프로그램 static / public 메소드 생성자가 private 메소드 => 외부에서 생성자를 호출해서 객체를 생성하지 못한다. Chapter 5. Singleton /42

Singleton 클래스 (리스트5-1) 02. 예제 프로그램 private static singleton 정적 필드 Singleton 클래스를 로드할 때 한번만 실행된다. private이므로, 외부에서 접근하지 못한다. private Singleton( ) 생성자 private 메소드이므로, 외부에서 new Singleton( )을 호출하지 못함. public static Singleton getInstance( ) Singleton 클래스의 유일한 하나의 인스턴스를 얻을 때 사용하는 메소드 Chapter 5. Singleton /42

02. 예제 프로그램 Main 클래스 (리스트5-2) Singleton.getInstance( )를 이용하여, Singleton 클래스의 객체를 얻어온다. obj1변수와 ojb2 변수가 같은 객체의 주소를 참조하는지 비교 if(obj1 == obj2) Singleton 객체 obj1: obj2: Chapter 5. Singleton /42

03. 등장 역할 Singleton의 역할 Chapter 5. Singleton /42

왜 제한할 필요가 있는가? 유일한 하나의 인스턴스는 언제 생성되는가 04. 독자의 사고를 넓혀주는 힌트 인스턴스가 하나만 존재한다는 것이 보증되면, 인스턴스 상호 간에 영향을 주어 생각지 못한 버그가 발생할 가능성이 없어진다. 유일한 하나의 인스턴스는 언제 생성되는가 프로그램 실행 후, 처음으로 Singleton.getInstance( ) 메소드가 호출되면, Singleton 클래스가 초기화되고, 이 때 static 필드인 singleton 필드가 초기화된다. Chapter 5. Singleton /42

Abstract Factory 패턴 (8장) Builder 패턴 (7장) Facade 패턴 (15장) 05. 관련 패턴 Abstract Factory 패턴 (8장) Builder 패턴 (7장) Facade 패턴 (15장) Prototype 패턴 (6장) Chapter 5. Singleton /42

하나의 인스턴스만 생성되어야 하는 클래스 구현 패턴 06. 요약 하나의 인스턴스만 생성되어야 하는 클래스 구현 패턴 Chapter 5. Singleton /42

5-1. TicketMaker 클래스에 Singleton 패턴 적용하기 연습 문제 5-1. TicketMaker 클래스에 Singleton 패턴 적용하기 해답에서, getNextTicketNumber( )를 synchronized로 선언한 이유는? 다수의 스레드가 동시에 이 메소드를 호출하면, 같은 값을 반환할 위험이 있기 때문 synchronized 메소드 실행 시, 다른 스레드가 그 메소드를 호출하면, 그 메소드 실행이 완료될 때까지 기다려야 한다. Chapter 5. Singleton /42

5-2 연습 문제 인스턴수의 개수가 3개로 한정되어 있는 클래스 Triple 만들기 배열을 이용한다. Chapter 5. Singleton /42

5-3. 리스트5-4가 Singleton 패턴이 되지 않는 이유는? 연습 문제 5-3. 리스트5-4가 Singleton 패턴이 되지 않는 이유는? 구현 방식 설명 getInstance( ) 메소드에서, singleton 필드가 null 이면 Singleton 객체를 생성하고, null 이 아니면, 현재 있는 Singleton 객체를 반환한다. null 은, 현재 Singleton 객체가 생성되었는지 안 되었는지를 나타내는 값으로 사용된다. Chapter 5. Singleton /42

5-3(계속). 리스트5-4가 Singleton 패턴이 되지 않는 이유는? 연습 문제 5-3(계속). 리스트5-4가 Singleton 패턴이 되지 않는 이유는? Singleton 패턴이 안 되는 이유(다중 스레드 환경인 경우) 두 스레드가 동시에 getInstance( )를 호출한 경우 첫 스레드가 (singleton == null) 인지 비교해서 ‘참’이므로 Singleton 객체를 생성하고고, 그 객체를 singleton 변수에 할당하려고 한다. 그런데, singleton 변수에 할당하기 직전에, 다른 스레드가 CPU를 할당받고 getInstance( )를 호출하여 (singleton == null) 을 비교하는 경우가 있다. 아직 singleton 변수에는 Singleton 객체가 할당되어 있지 않으므로, 비교 결과가 또 참이 되어 Singleton 객체를 또 생성하려고 한다. Chapter 5. Singleton /42

5-3(계속). 리스트5-4가 Singleton 패턴이 되지 않는 이유는? 연습 문제 5-3(계속). 리스트5-4가 Singleton 패턴이 되지 않는 이유는? 결과적으로 두 개 이상의 Singleton 객체가 생성될 수 있다. 예: 443~444페이지 리스트 5-5 main( )에서 3개의 스레드를 생성하고, run( )에서 Singleton.getInstance( )를 실행한다. 리스트 A5-6 생성자 Singleton( )에서, 객체 생성시 일부러 속도를 sleep 하고 CPU를 내 놓는다. => 두 개 이상의 인스턴스가 생성될 확률이 높아짐 Chapter 5. Singleton /42

5-3(계속). 리스트5-4가 Singleton 패턴이 되지 않는 이유는? 연습 문제 5-3(계속). 리스트5-4가 Singleton 패턴이 되지 않는 이유는? 해결책 getInstance( ) 메소드를 synchronized로 선언한다. 동시에 두 개 이상의 스레드가 getInstance( ) 메소드 안으로 들어오지 않도록 막는다. Chapter 5. Singleton /42