티스토리 뷰
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으로 쓰는 이유?
singleton과 static의 차이처럼, 이 역시 애매모호하고 큰 차이는 없다.
둘중에 싱글톤이 조금 더 나았던거처럼, 구현시 편의성 등의 이점으로 싱글턴을 택한다.
추가로, 싱글톤과 멀티스레드 환경에서의 동기화 문제에 관해 오해할만한 내용
References
Difference between static class and singleton pattern?
Difference between Singleton Pattern vs Static Class in Java
'General, Java' 카테고리의 다른 글
Collection.stream().forEach() vs Collection.forEach() (0) | 2019.11.20 |
---|---|
FilenameUtils를 이용한 파일 확장자 검사 (Apache Commons IO 2.5 API) (0) | 2019.09.14 |
DTO의 사용범위 / Entity와의 변환에 대한 논의 (0) | 2019.09.14 |
Java) toString()을 override하는 10가지 팁 (번역/요약) (0) | 2019.09.14 |
Dependency Injection (basic) (0) | 2019.09.14 |
- Total
- Today
- Yesterday
- C
- Android Studio
- Android
- 리버싱
- graph
- JPA
- queue
- Stack
- git
- 우아한 테크코스
- 개발자
- FRAGMENT
- mysql
- socket
- javascript
- 웹해킹
- brute-force
- bfs
- Data Structure
- webhacking.kr
- 프로그래머스
- Java
- 회고
- OneToMany
- dfs
- Algorithm
- reversing
- sort
- 해외여행
- Vo
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |