<commit_before>---
layout: post
title: 싱글톤 디자인패턴
date: 2017-01-09
categories: 디자인패턴
published: true
---

며칠 전에 on-campus job 인터뷰를 봤는데 싱글 톤을 구현하는 내용이 있었다. 디자인 패턴에 전무한 나로써는 아무 말도 하지 못하였다. 그래서 오늘은 싱글 톤에 대해서 포스팅하려 한다.

### 싱글톤 패턴(Singleton Pattern)이란?
생성하고자 하는 인스턴스의 수를 오직 하나로 제한하는 디자인 패턴이다. 여러 가지 패턴들 중 가장 쉽고 자주 쓰이게 되면서도 가장 문제가 될 소지를 가지는 패턴이다. 주로 환경설정이나 풀을 관리하는 클래스로 사용된다.

### 싱글톤 구현(Java)
생성자가 `private`으로 선언되어 있기 때문에 클래스 외부에서 직접 `new`키워드로 객체를 생성하지 못한다.

~~~ java
class Singleton{
	private static Singleton instance;
    private Singleton(){
    }
    public static Singleton getInstance(){
    	if(instance == null)
        	instance = new Singleton();
        return instance;
    }
    
}
~~~

### 싱글톤 구현(Python)

~~~ python
class Singleton(object):
	_instance = None
	def __new__(cls, *args, **kwargs):
		if not cls._instance:
			cls._instance = super(Singleton,cls).__new__(
					cls, *args, **kwargs)
		return cls._instance
~~~

### 싱글톤 장점
- 하나의 프로그램 내에서 공통적으로 쓰이는 자원을 효율적으로 관리할 수 있다.
- 객체를 한번만 생성하기 때문에, Heap 영역에 올라가는 시간과 메모리를 줄일 수 있다.

### 싱글톤 단점
- 프로그램의 Coupling을 높여 한 곳에서의 변경이 다른 부분에 영향을 미칠 수 있다.
- 전역으로 선언된 클래스를 참조하기 때문에 유닛테스트하기가 어려워진다.
<commit_msg>Update 2017-01-09-싱글톤-디자인패턴.md<commit_after>---
layout: post
title: 싱글톤 디자인패턴
date: 2017-01-09
categories: 디자인패턴
published: true
---

며칠 전에 on-campus job 인터뷰를 봤는데 싱글 톤을 구현하는 내용이 있었다. 디자인 패턴에 전무한 나로써는 아무 말도 하지 못하였다. 그래서 오늘은 싱글 톤에 대해서 포스팅하려 한다.

### 싱글톤 패턴(Singleton Pattern)이란?
생성하고자 하는 인스턴스의 수를 오직 하나로 제한하는 디자인 패턴이다. 여러 가지 패턴들 중 가장 쉽고 자주 쓰이게 되면서도 가장 문제가 될 소지를 가지는 패턴이다. 주로 환경설정이나 풀을 관리하는 클래스로 사용된다.

### 싱글톤 구현(Java)
생성자가 `private`으로 선언되어 있기 때문에 클래스 외부에서 직접 `new`키워드로 객체를 생성하지 못한다.

``` java
class Singleton{
	private static Singleton instance;
    private Singleton(){
    }
    public static Singleton getInstance(){
    	if(instance == null)
        	instance = new Singleton();
        return instance;
    }
    
}
```

### 싱글톤 구현(Python)

``` python
class Singleton(object):
	_instance = None
	def __new__(cls, *args, **kwargs):
		if not cls._instance:
			cls._instance = super(Singleton,cls).__new__(
					cls, *args, **kwargs)
		return cls._instance
```

### 싱글톤 장점
- 하나의 프로그램 내에서 공통적으로 쓰이는 자원을 효율적으로 관리할 수 있다.
- 객체를 한번만 생성하기 때문에, Heap 영역에 올라가는 시간과 메모리를 줄일 수 있다.

### 싱글톤 단점
- 프로그램의 Coupling을 높여 한 곳에서의 변경이 다른 부분에 영향을 미칠 수 있다.
- 전역으로 선언된 클래스를 참조하기 때문에 유닛테스트하기가 어려워진다.

{'fraction_non_alphanumeric': 0.10406852248394004, 'fraction_numerical': 0.010278372591006424, 'mean_word_length': 3.0345423143350603, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3425451', 'n_tokens_mistral': 1606, 'n_tokens_neox': 2003, 'n_words': 343}