yaini
정리하는 습관
yaini
전체 방문자
오늘
어제
  • 분류 전체보기 (43)
    • CS (4)
    • Java (14)
      • build (1)
      • spring (6)
      • JPA (4)
    • Database (5)
      • MySQL (5)
    • Clean Code (11)
    • Devops (9)
      • CI (2)
      • CD (2)
      • AWS (4)
    • ETC (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 데이터베이스
  • InnoDB
  • database
  • 클린 아키텍처
  • querydsl
  • 자바
  • s3
  • JPA
  • Terraform
  • SQL
  • exsits
  • 격리 수준
  • 구조 패턴
  • ABAC
  • Real MySQL 8.0
  • Gradle
  • 디자인 패턴
  • Spring
  • 타겟 그룹
  • java
  • Hibernate
  • 구조패턴
  • ORM
  • AWS
  • 계층형 아키텍처
  • 레코드 수준 잠금
  • MySQL
  • 디자인패턴
  • 생성 패턴
  • 만들면서 배우는 클린 아키텍처

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yaini

정리하는 습관

Clean Code

[Design Pattern] 생성 패턴 - 싱글톤 패턴

2022. 3. 3. 00:58
반응형
  • github 코드
    https://github.com/yaini/Spring_Study/blob/spring-2-oop-design-pattern/design-pattern/src/main/java/creational

싱글톤 패턴

한 클래스에 한 인스턴스만 존재하도록 제한하는 패턴

특징

  • 기본 생성자가 private
  • static 팩토리 메소드인 getInstance
  • 인스턴스를 저장할 static 필드

장점

  • 하나의 인스턴스만 생성하므로 메모리 낭비를 방지할 수 있다.
  • static으로 전역으로 사용되는 인스턴스이기 때문에 데이터 공유가 쉽다.

단점

  • 여러 스레드에서 동시에 접근 할 수 있으므로 동시성 문제 유의하여 설계해야 한다.
  • 단위 테스트는 격리된 환경에서 실행되어야 하지만, 싱글톤 패턴은 전역에서 사용하기 때문에 테스트가 어렵다.
  • new 키워드를 직접 사용하여 클래스 안에서 객체를 생성하게 되므로 SOLID 원칙 중 DIP를 위반한다.
  • 생성자가 private으로 선언되어 상속이 불가능하므로 자식 클래스를 생성할 수 없다.
  • 상태를 가질 수 없다.

전체 코드

public class Singleton {
    public static void main(String[] args){
        IdentificationCard.getInstance();
    }
}

class IdentificationCard{

    private static IdentificationCard instance;

    private IdentificationCard(){};

    public static IdentificationCard getInstance(){
        if( instance == null ) {
            return new IdentificationCard();
        }else{
            return instance;
        }
    }
}

 

단점이 너무 많아서 잘 사용하지 않을 것 같지만 스프링 프레임 워크의 bean은 모두 싱글톤이다.

싱글톤의 단점들을 보완하여 스프링에서 싱글톤 객체를 관리해준다.

또한 이런 싱글톤 패턴들의 단점들을 보완한 패턴들도 많이 있다.

시간이 나면 정리해보는걸로🤔

반응형

'Clean Code' 카테고리의 다른 글

[Design Pattern] 구조 패턴 - 컴포지트 패턴  (0) 2022.03.06
[Design Pattern] 구조 패턴 - 데코레이터 패턴  (0) 2022.03.03
[Design Pattern] 생성 패턴 - 프로토 타입 패턴  (0) 2022.03.03
[Design Pattern] 생성 패턴 - 팩토리 메소드 패턴, 추상 팩토리 패턴  (0) 2022.03.01
[Design Pattern] 생성 패턴 - 빌더 패턴  (0) 2022.03.01
    'Clean Code' 카테고리의 다른 글
    • [Design Pattern] 구조 패턴 - 컴포지트 패턴
    • [Design Pattern] 구조 패턴 - 데코레이터 패턴
    • [Design Pattern] 생성 패턴 - 프로토 타입 패턴
    • [Design Pattern] 생성 패턴 - 팩토리 메소드 패턴, 추상 팩토리 패턴
    yaini
    yaini

    티스토리툴바