객체와 불변객체
일반적인 객체 : 상태와 행위를 가짐
불변 객체 : 생성 이후 그 상태 값에 대해서 불변이 보장되는 객체
불변 객체라는 용어가 존재하는 이유는 기본적으로 객체가 자신의 상태값에 대해서 불변을 보장하지 않는다걸까?
불변 객체는 인스턴스 즉, 객체 변수에 저장된 상태값의 불변을 보장하는 객체이다.
그러면 객체에서 이 변수와 값이 어떤 방식으로 전달되고 처리되는지 알아보자
Pass By Value / Pass By Reference 는 변수에 저장된 값을 다른 곳에 넘겨주는 방식을 분류할 때 등장하는 용어이다. 자바는 Pass By Value 방식만을 사용하고 있는 언어라고 자바의 아버지 제임스 고슬링이 이야기 하였다.
Pass By Value는 복사된 데이터를 전달하여 구성함으로써 값을 수정하여도 원본의 데이터에는 영향을 주지 않도록 하는 방식이라고 나와 있다. 그렇다면 원본의 데이터가 바뀌지 않는데 우리는 왜 불변을 신경 써야 하는 걸까?
먼저 자바에서
객체가 어떻게 Pass By Value 방식으로 데이터값을 전달받고 저장하는지 알아보고 그 과정에서 어떻게 객체의 불변성이 깨지는지 그리고 이를 방지하기 위한 방법은 무엇인지 알아보자
자바 메모리 영역
스택 영역(Stack)
- 지역변수(메서드 내에 선언된 변수) / 매개변수 등이 할당
힙 영역(Heap)
- 인스터스 변수 / 클래스 변수 등이 할당
1. 객체가 원시타입 값을 가는 경우
https://youtu.be/AjpJS9WrDrs?t=154
2. 객체가 참조타입 값을 가지는 경우
https://youtu.be/AjpJS9WrDrs?t=238
final
- 단순히 선언된 변수가 초기화될 때를 제외하고 값이 재할당되는 것을 막아주는 키워드이다.
- 따라서 우리는 참조변수에 대해서 단순하게 final 선언만 해준다고 불변을 보장할 수 없다.
객체가 일반 객체를 속성값으로 가질 때 불변을 보장하고 싶다면...
https://youtu.be/AjpJS9WrDrs?t=349
객체가 참조타입 값을 가지는 경우(불변 Reference type 컬렉션)
https://youtu.be/AjpJS9WrDrs?t=382
객체가 불변 Reference type 컬렉션을 속성값으로 가질 때 불변을 보장하고 싶다면...
https://youtu.be/AjpJS9WrDrs?t=472
참고
https://www.youtube.com/watch?v=AjpJS9WrDrs&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC
'개발 관련 강의 정리 > 10분 테코톡' 카테고리의 다른 글
[10분 깃코톡] 🍟 웨지의 Git 브랜치 전략 정리 (0) | 2023.05.19 |
---|---|
[10분 테코톡] 결의 브라우저 렌더링 정리 (0) | 2023.05.18 |
[10분 테코톡] 매트, 토르의 MySQL 성능 최적화 정리 (0) | 2023.05.15 |
[10분 테코톡] 앤지의 DB Replication 정리 (0) | 2023.05.14 |
[10분 테코톡] 연로그의 쿠키 vs 세션 vs 토큰 vs 캐시 정리 (0) | 2023.05.13 |
댓글