inblog logo
|
silver
    디자인패턴

    [디자인패턴] 5. 싱글톤패턴

    silver's avatar
    silver
    Nov 13, 2024
    [디자인패턴] 5. 싱글톤패턴
    Contents
    1. 싱글 톤패턴 이해 코드
     
    • 클래스의 인스턴스를 하나만 생성하도록 보장하는 디자인 패턴으로 어떠한 클래스가 단일 객체로만 존재해야할 때 사용한다.
    • DB연결, 로깅 시스템, 캐시와 같은 프로그램 내에서 여러 곳에서 접근(전역접근이 가능해야한다)하지만 하나의 상태만 유지하는 리소스에 유용하다.
     
    싱글톤 패턴의 장점
    • 전역적 접근성: 애플리케이션 어디서든 인스턴스에 접근할 수 있습니다.
    • 메모리 절약: 한 번 생성된 인스턴스를 재사용하므로 메모리 효율성이 높습니다.
    • 상태 관리의 일관성: 단일 인스턴스로 상태를 공유하기 때문에 데이터 일관성을 유지할 수 있습니다.
    싱글톤 패턴의 단점
    • 단일 책임 원칙 위반 가능성: 전역 접근성이 제공되므로, 클래스가 여러 책임을 가지게 될 위험이 있습니다.
    • 테스트 어려움: 싱글톤 클래스는 인스턴스가 고정되어 있어 유닛 테스트에서 모킹(Mock)을 적용하기 어렵습니다.
    • 병목 현상: 싱글톤 인스턴스에 동기화가 적용된 경우, 여러 스레드가 동시에 접근할 때 성능 저하가 발생할 수 있습니다.
     

    1. 싱글 톤패턴 이해 코드

    상위 클래스

    public abstract class Animal { public abstract String getName(); }
     

    하위클래스

    public class Cat extends Animal { private String name = "고양이"; @Override public String getName() { return name; } } public class Mouse extends Animal { private String name = "쥐"; @Override public String getName() { return name; } } public class Doorman { // static을 이용한 이른 초기화로 싱글톤 패턴 생성 static Doorman instance = new Doorman(); //static으로 new로 바꾼다 private Doorman() {} //private로 바꾸면 다른 class에서 사용 불가능하다. public void 쫓아내(Animal animal){ System.out.println(animal.getName()+" 쫓아내"); } }
     

    App

    public class App { public static void main(String[] args) { // Doorman doorman = new Doorman(); Doorman doorman = Doorman.instance; Doorman doorman2 = Doorman.instance; //같은 주소 확인을 위해 hashCode찍어본다 // -> 793589513로 같음! // -> doorman과 doorman2는 동일한 객체이다 -> 싱글톤 System.out.println(doorman.hashCode()); System.out.println(doorman2.hashCode()); //hashcode -> 50개의 임의의 난수, 충돌날 확률이 매우 낮음 // call by value -> 값이 바로 나와 기본자료형(사이즈를 알 수 있어 int double float) // call by reference -> 주소 튀어나와 레퍼런스 자료형(사이즈를 알 수 없다 String -> pointing해야한다) Animal cat = new Cat(); Animal mouse = new Mouse(); doorman.쫓아내(cat); doorman.쫓아내(mouse); } }
    Share article
    Contents
    1. 싱글 톤패턴 이해 코드

    silver

    RSS·Powered by Inblog