검수요청.png검수요청.png

"싱글톤패턴"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(구조)
(구조)
16번째 줄: 16번째 줄:
  
 
== 구조 ==  
 
== 구조 ==  
[[파일:싱글턴패턴구조.png|250픽셀|섬네일|왼쪽|싱글톤 패턴 구조]]
+
[[파일:싱글턴패턴구조.png|300픽셀|섬네일|왼쪽|싱글톤 패턴 구조]]
 
싱글톤 패턴은 단일 인스턴스의 클래스가 액세스와 처음 사용시 초기화를 담당한다. 단일 인스턴스는 전용 정적 속성으로 정의하고 접근자 함수는 퍼블릭 정적 메소드로 선언한다.<ref name="singleton02">얇은생각, <[https://jjeongil.tistory.com/566 싱글턴 디자인 패턴 : 정의, 개념, 구조 예시]>, <<개인 블로그>>, 2019-10-05</ref> 싱글톤 패턴을 사용한 클래스에 예제의 클라이언트(client)가 직접적으로 접근할 수 없도록 [[프라이빗]](private) [[접근제어자]]를 사용하고 [[객체]]가 여러개 생성되는 것을 막기 위해서 [[생성자]]에 정적인 선언을 해준다. 또 [[메소드]]에 [[객체]]에 접근할 수 있는 getInstance 메소드를 선언해 클라이언트(client)에서 간접적으로 참조가 가능하게 한다. 결과적으로 new를 사용해 객체를 생성하더라도 생성자가 정적으로 선언되어있기 때문에 객체를 참조할때 같은 객체를 참조하게 되고 하나의 객체로 어디서나 접근이 가능하도록 설정이 가능하다.
 
싱글톤 패턴은 단일 인스턴스의 클래스가 액세스와 처음 사용시 초기화를 담당한다. 단일 인스턴스는 전용 정적 속성으로 정의하고 접근자 함수는 퍼블릭 정적 메소드로 선언한다.<ref name="singleton02">얇은생각, <[https://jjeongil.tistory.com/566 싱글턴 디자인 패턴 : 정의, 개념, 구조 예시]>, <<개인 블로그>>, 2019-10-05</ref> 싱글톤 패턴을 사용한 클래스에 예제의 클라이언트(client)가 직접적으로 접근할 수 없도록 [[프라이빗]](private) [[접근제어자]]를 사용하고 [[객체]]가 여러개 생성되는 것을 막기 위해서 [[생성자]]에 정적인 선언을 해준다. 또 [[메소드]]에 [[객체]]에 접근할 수 있는 getInstance 메소드를 선언해 클라이언트(client)에서 간접적으로 참조가 가능하게 한다. 결과적으로 new를 사용해 객체를 생성하더라도 생성자가 정적으로 선언되어있기 때문에 객체를 참조할때 같은 객체를 참조하게 되고 하나의 객체로 어디서나 접근이 가능하도록 설정이 가능하다.
  

2020년 8월 13일 (목) 13:16 판

싱글톤 패턴(Singleton Pattern)이란 인스턴스가 오직 하나만 생성되는 것을 보장하고 어디에서든 이 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다. 원래 싱글톤(Singleton)이라는 단어는 '단 하나의 원소만을 가진 집합'이라는 수학이론에서 유래되었다.[1]

싱글톤 패턴

개요

디자인 패턴에서 싱글톤 패턴(Singleton Pattern)을 따르는 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성죄는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용되며 GoF(Gang of Four), 흔히 말해서 4인방이라고 하는 인물들이 구분한 패턴에서 생성 패턴에 속한다.[2]

특징[3]

목적

DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용하고 안드로이드 앱 같은 경우 각 액티비티나 클래스 별로 주요 클래스들을 일일이 전달하기가 번거롭기 때문에 싱글톤 클래스를 만들어 어디서나 접근하도록 설계하는것이 편하기 때문에 사용한다. 인스턴스가 절대적으로 한개만 존재하는 것을 보증하고 싶을 경우에 사용한다.

장점

고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있고 싱글톤 패턴으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.

단점

싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 OCP(Open-Closed Principle), 즉, 개방-폐쇄 원칙을 위배하게 된다. 따라서 수정이 어려워지고 테스트하기 어려워진다. 또한 멀티쓰레드 환경에서 동기화 처리를 하지 않는다면 인스턴스가 2개 생성되는 경우가 발생하기도 한다.

구조

싱글톤 패턴 구조

싱글톤 패턴은 단일 인스턴스의 클래스가 액세스와 처음 사용시 초기화를 담당한다. 단일 인스턴스는 전용 정적 속성으로 정의하고 접근자 함수는 퍼블릭 정적 메소드로 선언한다.[4] 싱글톤 패턴을 사용한 클래스에 예제의 클라이언트(client)가 직접적으로 접근할 수 없도록 프라이빗(private) 접근제어자를 사용하고 객체가 여러개 생성되는 것을 막기 위해서 생성자에 정적인 선언을 해준다. 또 메소드객체에 접근할 수 있는 getInstance 메소드를 선언해 클라이언트(client)에서 간접적으로 참조가 가능하게 한다. 결과적으로 new를 사용해 객체를 생성하더라도 생성자가 정적으로 선언되어있기 때문에 객체를 참조할때 같은 객체를 참조하게 되고 하나의 객체로 어디서나 접근이 가능하도록 설정이 가능하다.

각주

참고자료

같이 보기


  검수요청.png검수요청.png 이 싱글톤패턴 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.