싱글톤이 머임!!!!
싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴을 의미한다.
단 하나의 인스턴스를 사용하여 여러번 호출해도 똑같은 인스턴스를 불러올수 있게한다. 내부에 선언되는 친구들을 private으로 선언하고 static을 줌으로써 인스턴스화 하지않고 사용가능하게 한다. 근데 클래스 내부에서 전역변수로 선언한다.
(인스턴스가 뭐지;;)
인스턴스가 뭐임!!
- 인스턴스(instance)란 객체 지향 프로그래밍(OOP)에서 클래스(class)에 소속된 개별적인 객체를 말한다.
- 객체를 소프트웨어에 실체화 하면 그것을 ‘인스턴스’라고 부른다.
- oop의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 ‘인스턴스’라고 부른다.
등등 있는데 붕어빵 비유가 너무 찰떡인 것 같다.
붕어빵틀이 클래스면 붕어빵틀에서 찍어낸 붕어빵 각각이 인스턴스인 것!
그럼 싱글톤 왜 씀!
- 고정된 메모리 영역을 얻으면서 하나의 인스턴스를 생성하기 때문에 메모리 낭비를 방지할 수 있다
- 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
- DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용한다.
- 인스턴스가 절대적으로 한개만 존재하는 것을 보증하고 싶을 경우 사용한다.
- 두 번째 이용시부터는 객체 로딩 시간이 현저하게 줄어 성능이 좋아진다.
- 안드로이드 앱 같은 경우 각 액티비티나 클래스별로 주요 클래스들을 일일이 전달하기가 번거롭기 때문에 싱글톤 클래스를 만들어 어디서나 접근하도록 설계하는 것이 편하다.
싱글톤 문제점
싱글톤은 전역성을 띄면서 다른 객체와 공통으로 사용하는 경우와 같은 몇 가지 케이스에서만 사용할 때 효율적이며 그 외에는 문제점이 생길 수 있다.
- 싱글톤으로 만든 객체의 역할이 간단한 것이 아닌 역할이 복잡한 경우라면 해당 싱글톤 객체를 사용하는 다른 객체간의 결함도가 높아져서 유연하게 대처할 수 없다. ("개방-폐쇄 원칙" 을 위배한다)
- 싱글톤 객체를 수정할 경우 싱글톤 객체를 사용하는 곳에서 사이드 이팩트 발생 확률이 생기게 된다(참조하고 있는 모든 값들이 변경되어야 하기 때문)
- 멀티 쓰래드환경에서 동기화 처리 문제등이 생기게 된다.
Global is Evil...하다가 궁금해서 조사해봤습니다. 너무 길어서 따로 뺐습니다 ^^b
'아 이게 뭐임!' 카테고리의 다른 글
HikariCP이 뭐임! (0) | 2021.07.09 |
---|---|
HeidiSQL이 뭐임! (0) | 2021.07.09 |
Connection Pool이 뭐임!! (0) | 2021.07.08 |
WinSCP가 뭐임! (0) | 2021.07.07 |
SQL developer가 뭐임! (0) | 2021.07.06 |