Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- redis
- Exception
- Transaction
- bounded context
- Rest
- PSA
- JSON
- rest api
- Spring Data Redis
- Generic
- di
- OOP
- MSA
- spring
- AOP
- Java
- junit5
- SOA
- *
- ddd
- 서명
- JWT
- bytecode
- reflection
- jvm
- IOC
- mockito
Archives
- Today
- Total
개발자일기
가변보다 불변객체 본문
객체지향 프로그래밍에서는 가변보다 불벽객체를 지향한다.
자바에서는 대표적인 예로 String, BigInteger 같은 클래스 들이 있다.
지향하는 이유을 알아보자.
불변 클래스(객체는) 가변 보다 오류가 생길 여지도 적다.
- 쓰레드 안정하여 동기화 필요가 없다.
- 안심하고 공유 할수 있다.
- 특별한 이유가 없다면 불변으로
불변 객체라는건 이 객체가 생성과 동시에 완전한 객체
- 불변 객체를 신뢰하고 사용할 수있다.
단점도 존재한다.
값이 다르면 독립된 객체가 생성이 필요.
- 하지만 현대의 하드웨어 빵빵한 스펙에는 딱히 문제가 되지 않을것같다.
- Integer클래스가 지원하는 객체풀(캐시)을 이용하는 방법도 있다.
불변 클래스 만들기
- final class로 상속을 방어
- 하위클래스에서 변경할수 있다.
- 필드들을 final화
- 불변의 필드라는 의도를 명시
- 쓰레드 동기화에 문제 없다.
- private 필드
- 클라이언트에서 접근 하여 수정하는일을 막아준다.
- 외 부 접근 할수 없도록 한다.
- 가변 객체에 참조한는 필드를 제공해야한다면, 참조를 얻을수 없도록, 복사해서 전달한다.
- 클라이언트가 수정을 가할수도 있기때문이다.
'개발' 카테고리의 다른 글
Lettuce Redis Cluster 적용 (0) | 2021.11.21 |
---|---|
카프카 개념과 특징 (0) | 2021.01.25 |
생성자 대신 정적 팩토리 메소드를 고려하자 (0) | 2020.05.22 |
객체지향 생활 체조 원칙 3: 모든 원시값과 문자열을 포장한다. (0) | 2020.05.22 |
객체 지향 생활 체조 원칙 규칙 8 : 일급 컬렉션 (0) | 2020.05.17 |
Comments