lala9663
Bump into
lala9663
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (1)
    • Java (39)
    • Spring (28)
    • IntelliJ (7)
    • Git,Github (2)
    • CS (22)
    • Algorithm (23)
      • Algorithm 문제 (13)
    • 공부방 (9)
    • 그 외 (27)
      • TIL (24)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준 2292
  • 백준 벌집
  • Intellij
  • Post
  • 1193
  • 동적
  • 자바 람다
  • servlet
  • 정적
  • try-catch
  • Spring
  • 백준
  • Java
  • thread
  • Get
  • 웹 3.0
  • 자바
  • Til
  • 스트림(Stream)
  • 웹서버
  • jsp
  • was

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
lala9663

Bump into

[Java] 싱글톤 패턴
Java

[Java] 싱글톤 패턴

2022. 11. 2. 13:09

싱글톤 패턴

어플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다.
간단하게 설명하면 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

즉, 싱글톤 패턴은 이와 같은 상황에 사용을 한다.

  • 프로그램 내에서 하나의 객체만 존재해야 한다.
  • 프로그램 내에서 여러 부분에서 해당 객체를 공유하여 사용해야 한다.

 

싱글톤 패턴을 사용하는 이유

하나의 인스턴스만을 사용하는 싱글톤 패턴의 이점은 다음과 같다.

  1. 메모리 측면의 이점
    싱글톤 패턴을 사용하게 된다면 한 개의 인스턴스만을 고정 메모리 영역에 생성하고 추후 해당 객체를 접근할 때 메모리 낭비를 방지할 수 있다.
  2. 속도 측면의 이점
    생성돈 인스턴스를 사용할 때는 이미 생성된 인스턴스를 활용하여 속도 측면에 이점이 있다.
  3. 데이터 공유가 쉽다
    전역으로 사용하는 인스턴스이기 때문에 다른 여러 클래스에서 데이터를 공유하며 사용할 수 있다. 하지만 동시성 문제가 발생할 수 있어 이 점은 유의하여 설계해야 한다.

이러한 장점을 가진 싱글톤 패넡은 DBCP (DataBaseCommection Pool)처럼 공통된 객체를 여러 개 생성해서 사용해야 하는 상황에서 많이 사용된다.

 

싱글톤 패턴의 문제점

싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우에 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙"을 위배하게 된다.(객체 지향 설계 원칙에 어긋남)
따라서 수정이 어려워지고 테스트하기 어려지고 유지보수의 비용이 높아질 수 있다.
또한 멀티쓰레드환경에서 동기화 처리를 안 하면 인스턴스가 두 개가 생성된다든지 하는 경우가 발생할 수 있다.

 

결론

싱글톤 패넡은 메모리, 속도, 데이터 공유 측면에서 이점이 있다. 하지만 그렇다고 해서 싱글톤 패턴이 무조건 좋은 것은 아니다.
multi-thread환경에서는 동시성 문제가 발생할 수 있기에 싱글톤 패턴을 사용하고자 한다면 사용하기 앞서 "해당 객체의 인스턴스가 한 개만 존재해야 하는지?"의 여부와 "사용을 했을 때 동시성 문제가 발생하지 않는지"를 체크를 하며 사용해야 한다.
이러한 이유로 싱글톤 패턴은 꼭 필요한 경우가 아니라면 지양해야 한다.

 

 

 

 

참고 https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

'Java' 카테고리의 다른 글

[Java] ArrayList  (0) 2022.11.23
[Java] Reflection(리플렉션) 이란?  (0) 2022.11.03
[Java] 컬렉션 프레임워크  (0) 2022.10.31
[Java] Optional 이란?  (1) 2022.10.23
[Java] Stream(스트림)?  (0) 2022.10.18
    'Java' 카테고리의 다른 글
    • [Java] ArrayList
    • [Java] Reflection(리플렉션) 이란?
    • [Java] 컬렉션 프레임워크
    • [Java] Optional 이란?
    lala9663
    lala9663
    초보의 험난한 공부

    티스토리툴바