TIL

2024. 11. 17

ilovedigital 2024. 11. 17. 16:58

값 타입과 불변 객체

 

값 타입의 공유 참조 문제

 

임베디드 타입이 같은 값 타입을 여러 엔티티에서 공휴마녀 위험하다. 왜냐하면 특정 엔티티만 값이 바뀌길 희망했지만 다른 참조하고 있는 다른 엔티티의 값도 변경될 수 있기 때문이다.

 

이런 부작용을 막기 위해서는 값을 복사해서 사용하면 된다.실제 인스턴스 값을 공유하는 것은 아까처럼 위험하기에 항상 값을 복사하여 사용하면 공유 참조 문제를 피할 수 있다. 하지만 직접 정의한 값 차입은 자바의 기본(원시) 타입이 아닌 객체 타입이다. 자바는 기본 타입이면 복사해서 넘기고, 객체 타입은 참조하여 넘길 뿐이다. 

 

이런 점 때문에 객체의 공유 참조는 피할 수가 없는데 그렇다면 객체 자체를 불변하게 만들면 된다. 값을 수정할 수 없으므로 부작용을 차단 할 수 있는 것이다.

 

수정자를 따로 두지 않으면서 값의 변경을 막는다. 이렇게 된다면 만약 값을 수정하고 싶다면 새로운 객체를 만들어서 수정해야 할 것이다. 이렇게 값 타입을 불변 객체로 설계하면 상기 설명된 부작용들을 피할 수 있다.

 

확실히 많은 생각이 들게 한 문제였다. 나는 예전에 스프링으로 어플리케이션 백엔드 서버를 구축할 때, 이런 점을 고려하지 않았던 것 같다. 그냥 @Getter, @Setter 등을 때려박고, 뭐 그냥 접근자, 수정자를 만들어주니 모든 객체들도 이래야 겠다는 안일한 마인드 때문에 아마 잘못 참조되거나 많이 돌아가야 했던 기억들이 있었던거 같다.

 

이런 점을 고려하여, 다음에 객체 설계를 할때 참고해야 겠다.

 

활용 도서 : 자바 ORM 표준 JPA 프로그래밍 김영한 지음

 

'TIL' 카테고리의 다른 글

2025. 03. 02  (0) 2025.03.02
2025. 02. 16  (1) 2025.02.16
2024. 12 .01  (0) 2024.12.01
2024. 11. 24  (1) 2024.11.24
2024. 11. 15  (1) 2024.11.15