private 생성자나 열거 타입으로 싱글턴임을 보증하라

OH JU HYEON·2022년 8월 3일
1

Java

목록 보기
3/6
post-thumbnail

private 생성자나 열거 타입으로 싱글턴임을 보증하라

아이템 3

이번에는 싱글턴 패턴을 사용하는 방법에 대해 공부해 본다. 프로젝트를 만들면서 학교에서 알려주었던 것 중 하나가 싱글턴으로 만드는 것이다. 이번에는 조금 더 다양한 싱글턴을 활용하는 방법에 대해 체크해 본다.

싱글턴 패턴

싱글턴(singleton pattern)은 클래스의 인스턴스를 하나로 제한하는 소프트웨어 디자인 패턴이다. 좀 더 책에서 설명하는 대로 설명을 하자면 인스턴스를 하나만 생성할 수 있는 클래스 정도가 된다.

장점

싱글턴 패턴은 인스턴스를 하나로 제한하는 만큼 메모리 측면에서 이득을 볼 수가 있다.

싱글턴은 인스턴스를 하나로 제한하기 위해 정적 필드(static)를 사용하며 new키워드를 통해 첫 생성에만 메모리를 사용하고 이후에 해당 객체에 접근할 때는 다시 인스턴스를 생성하지 않고 이미 생성된 인스턴스를 사용하게 된다.

이때, 이미 사용된 인스턴스를 사용하는 만큼 속도 측면에서도 이점이 생길 수 있고 싱글턴으로 만들어진 클래스의 인스턴스는 전역 인스턴스라서 데이터 공유가 쉽다는 점도 이점이 된다.

단점

하나의 인스턴스가 작업을 하는 만큼 많은 일을 하거나 공유되면 다른 클래스의 인스턴스간에 결합도가 높아지는 문제가 있다. 결합도가 높아지면 객체 지향 설계 원칙 중 하나인 OCP(Open-Closed Principle, 개방-폐쇄 원칙)을 위반하게 된다.

또한, 책에 따르면 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어렵다고 한다. 왜냐하면 타입을 인터페이스로 정의해 구현한 싱글턴이 아니라면 싱글턴 인스턴스를 가짜 구현(mock)으로 대체할 수 없기 때문이다.

싱글턴 활용 방식

싱글턴 활용 방식은 아래와 같이 3가지 방법이 있다.

  1. public static final 필드 방식
  2. 정적 팩터리 방식
  3. 열거 타입 방식

이 중에서 책에서는 열거 타입 방식의 싱글턴이 가장 바람직하다고 말하고 있다.


작성하고 있는 부분입니다.

public static final 필드 방식

정적 팩터리 방식

열거 타입 방식

참고

tutorialspoint
Effective Java 3/E

👀 틀린 내용은 댓글로 피드백 주시면 참고하여 수정하겠습니다!
profile
읽기만 해도 이해가 되는 글을 쓰기 위해 노력합니다.

0개의 댓글