자바 프로그래밍을 공부하다가 더 알아보고 싶어서 남기는 공부기록이다.
객체 지향 프로그램에서 인스턴스를 하나만 생성하는 디자인 패턴
싱글톤 패턴(Singleton Pattern)
싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하는 디자인 패턴이다.
디자인 패턴: 객체 지향 프로그램을 어떻게 구현해야 유연하고 재활용성이 높은 프로그램을 만들 수 있는지를 정리한 내용을 말한다.
즉, 프로그램 특성에 따른 설계 유형을 이론화한 내용이다. < 말이 좀 어려운데, 쉽게 말하면 특정한 알고리즘이나 프로그래밍 언어를 위한 라이브러리가 아니라 객체 지향으로 설계하는 방법을 설명이다!
싱글톤 패턴은 생성자가 여러번 호출되어도, 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 것이다.
(java에서는 생성자를 private으로 선언해 다른 곳에서 생성하지 못하도록 만들고, getInstance() 메소드를 통해 받아서 사용하도록 구현한다)
#왜 쓰는가?
먼저, 객체를 생성할 때마다 메모리 영역을 할당받아야 한다. 하지만 한번의 new를 통해 객체를 생성한다면 메모리 낭비를 방지할 수 있다.
또한 싱글톤으로 구현한 인스턴스는 '전역'이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능한 장점이 있다.
#많이 사용하는 경우가 언제인가?
주로 공통된 객체를 여러개 생성해서 사용해야하는 상황
데이터베이스에서 커넥션풀, 스레드풀, 캐시, 로그 기록 객체 등
안드로이드 앱 : 각 액티비티 들이나, 클래스마다 주요 클래스들을 하나하나 전달하는게 번거롭기 때문에 싱글톤 클래스를 만들어 어디서든 접근하도록 설계
또한 인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 때 사용함
#단점
객체 지향 설계 원칙 중에 개방-폐쇄 원칙이란 것이 존재한다.
만약 싱글톤 인스턴스가 혼자 너무 많은 일을 하거나, 많은 데이터를 공유시키면 다른 클래스들 간의 결합도가 높아지게 되는데, 이때 개방-폐쇄 원칙이 위배된다.
결합도가 높아지게 되면, 유지보수가 힘들고 테스트도 원활하게 진행할 수 없는 문제점이 발생한다.
또한, 멀티 스레드 환경에서 동기화 처리를 하지 않았을 때, 인스턴스가 2개가 생성되는 문제도 발생할 수 있다.
따라서, 반드시 싱글톤이 필요한 상황이 아니면 지양하는 것이 좋다고 한다. (설계 자체에서 싱글톤 활용을 원활하게 할 자신이 있으면 괜찮음)
'공부 STUDY > JAVA' 카테고리의 다른 글
[JAVA] 상속 | 부모를 부르는 예약어, super (0) | 2023.01.08 |
---|---|
[Java] 상속 inheritance, 클래스 생성과 형변환 | 예제를 통해 이해하기 (0) | 2023.01.08 |
JAVA 2회독 시작 기록 (0) | 2023.01.03 |
[JAVA] 스프링 시작 전, 생활코딩 JAVA + 수업 완강 회고록(2) (0) | 2022.12.29 |
[JAVA] 문자의 비교 : == 와 equals의 차이 (0) | 2022.12.28 |