일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- json
- kakao
- DaVinci Resolve
- 튜토리얼
- SQL
- iPad
- neo4j
- 유니티
- Apple
- 애플
- 아이패드
- 스프링
- 코틀린
- unity
- graph DB
- AWS
- 한글
- 아이폰
- 코딩학습
- Tutorial
- 프로그래머스
- 녹화프로그램
- 윈도우
- 윈도우10
- Python
- programmers
- 파이썬
- 영상편집
- spring
- Kotlin
- Today
- Total
코드짜는 노인네
[ComputerScience(CS)] 디자인 패턴 - 싱글톤 패턴 (Singleton pattern) 본문
[ComputerScience(CS)] 디자인 패턴 - 싱글톤 패턴 (Singleton pattern)
ikohong 2022. 9. 25. 01:37[ComputerScience(CS)] 디자인 패턴 - 싱글톤 패턴 (Singleton pattern)
신입 개발자가 되기 위해 많은 부분을 준비해야됩니다. 협업을 통해 여러기술을 막 사용해보았지만, 이해를 하지 않고, 기술 면접을 딱 할려고 하니, 입이 떨어지지 않아, 기초부터 다시 준비를 해야겠다는 생각을 했습니다. 그 중 CS(Computer Science) 준비를 해야된다는 이야기를 들어 블로그에 정리를 하면서 공부를 시작해볼까 합니다.
디자인 패턴 (Design pattern)
싱글폰 패턴을 알기전에 디자인 패턴이라는것부터 알아야됩니다.
디자인 패턴이란?
> 프로그램을 설계할 떄 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것을 의미
이렇게 작성을 해도 무슨 이야기인지 잘 모르겠다. '싱글톤 패턴'을 알아보면서 이 뜻을 이해해야될꺼 같다.
싱글톤 패턴 (Singleton pattern)
싱글톤 패턴이란?
> 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
이렇게 접근을 하니 '인스턴스'라는 단어부터 정확히 알고 가야될꺼 같다.
■ 인스턴스
> 설계도를 바탕으로 소프트웨어 세계를 구현된 구체적인 실체
public class Car {
...
}
public class Main {
public static void main(String[] args) {
Car Kia; // 객체
Kia = new Car(); // Kia는 Car 클래스의 '인스턴스' (객체를 메모리에 할당)
}
}
객체가 메모리에 할당되어 실제 사용될 때 '인스턴스'라고 부른다. 위의 코드를 보면 'new' 명령문을 이용하여, Car 클래스를 메모리에 생성되었다. 여기서 Kia는 Car 클래스의 '인스턴스'라고 한다.
그런데 이 싱글톤 패턴은 왜 사용할까?
바로 메모리 낭비를 방지하기 위함이다. 객체를 생성할 때마다 메모리 영역을 할당받아야하는데, 하나의 클래스에 하나의 인스턴스만 생성하는 '싱글톤 패턴'을 사용하게되면 하나의 인스턴스를 만들고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기에 인스턴스를 생성할 때 메모리 누스를 방지할 수 있는 장점을 가지고 있다.
싱글폰 패턴은 언제 많이 사용하냐?
> 보통은 데이터베이스 연결할 경우 많이 사용한다고 합니다.
싱글톤 패턴 예시
class Singleton{
String color;
private static class singleInstanceHolder {
private static final Singleton INSTANCE = new Singleton();
}
// synchronized를 사용한 이유는 여러 쓰레드에서 해당 인스턴스를 요청이 들어왔을경우 순서대로 처리를 위함
// '동시성 제어'를 위함
public static synchronized Singleton getInstance() {
return singleInstanceHolder.INSTANCE;
}
private Singleton(){
// 다른곳에서 해당 클래스의 인스턴스를 생성못하도록 하고 싶다면, 해당 코드를 작성하면 된다.
}
}
public class Instance {
public static void main(String[] args) {
Singleton a = Singleton.getInstance();
Singleton b = Singleton.getInstance();
a.color = "white";
b.color = "black";
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(a.color);
System.out.println(b.color);
System.out.println(a == b);
}
}
위의 코드는 예시로 'Singleton'클래스에 하나의 인스턴스를 생성하고 해당 클래스의 'getInstance()'메소드를 이용하여 해당 인스턴스를 가져오는 방법입니다. a,b의 hashCode(객체의 주소값을 반환하여 생성한 객체의 고유한 정수값)를 보면, 값이 같은것을 확인할 수 있으며, a,b의 color값을 변경하였지만, 결과는 'black''만 나오는 모습을 확인할 수 있다.
상글톤 패턴 단점
꼭 장점만을 가지고 있는것은 아니다. 단점을 한번 확인해보자!
- TDD (Test Driven Development)중 단위 테스트를 할 경우, 서로 독립적이여야하며, 테스트를 어떤 순서로도 실행을 할 수 있어야 한다.
> 허나, '싱글톤 패턴'의 경우 이미 생성된 하나의 인스턴스만 사용하기에, 테스트마다 독립적인 인스턴스를 만들기가 어렵다. - 모듈간의 결합을 강하게 만든다.
> 이럴경우 의존성 주입 (DI, Dependency Injection)을 통해 모듈간의 결합을 느슨하게 만들어 해결!
'Computer Science (CS)' 카테고리의 다른 글
[ComputerScience(CS)] 디자인 패턴 - MVC 패턴 (0) | 2022.09.25 |
---|