티스토리 뷰

Singleton 패턴과 (모든 메서드가 static으로 이뤄진) Static Class의 차이

차이점

Singleton

Static Class

원리

사용자 요청시 하나의 인스턴스를

생성해 재사용

인스턴스를 만들수없고,

당연히 생성자도 갖지않는다

인터페이스 구현 (가장 큰 차이점)

가능

불가능

follow OOP

O

X, 절차적 디자인으로 '함수'에 가깝다

override

가능

불가능

load

필요할때 Lazy load 가능

static binding in compile-time

performance

상대적으로 slow

fast, by static binding

test

easier

hard to mock and test

저장 위치 (중요x)

Heap

Stack

=> Singleton이 좀더 나은 분위기이고, 'OOP와 다형성의 이점'이 가장 큰 요지.

싱글톤 인스턴스는 매개변수로 전달되거나 일반적인 객체로 처리될 수 있다. 반면 static class는 정적 메서드만 가능하다 (원리적으론 그렇지만, getInstance로 어디서나 같은 인스턴스에 접근할수있으므로 매개변수로 넘길 필요는 없음)

Singleton보다 Static Class를 사용하기 좋은 경우

싱글톤이 상태를 갖지않고 global access를 제공한다면 Static Class를 고려해볼법하다.
static method는 컴파일시간의 static binding으로 싱글톤보다 좀더 빠르다.
(당연히 Static Class가 상태를 갖는것은 권장되지 않는다. 동시성 환경에서 race condition으로 문제가 발생할 수 있다 <- "state in static class is nightmare")


그렇다면, DAO를 일반적으로 static보다 singleton으로 쓰는 이유?

DAO를 Singleton으로 쓰는 이유

singleton과 static의 차이처럼, 이 역시 애매모호하고 큰 차이는 없다.
둘중에 싱글톤이 조금 더 나았던거처럼, 구현시 편의성 등의 이점으로 싱글턴을 택한다.

추가로, 싱글톤과 멀티스레드 환경에서의 동기화 문제에 관해 오해할만한 내용


References

Difference between static class and singleton pattern?
Difference between Singleton Pattern vs Static Class in Java

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함