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