Skip to content

Latest commit

 

History

History
62 lines (35 loc) · 1.63 KB

값 타입과 불변 객체.md

File metadata and controls

62 lines (35 loc) · 1.63 KB

값 타입과 불변 객체

값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 
따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다.

기본 타입(primitive type)

int a = 10;
int b = a; // 기본 타입은 값을 복사
b = 4; 

b에 4를 대입하더라도 a는 그대로 유지가 된다. → 즉, 값이 복사가 되어 넘어가는 것.



객체 타입

Address a = new Address(“Old”);
Address b = a; // 객체 타입은 참조를 전달
b.setCity(“New”)

객체 타입은 참조(주소)를 복사해서 넘긴다. → 그 뜻은 한 인스턴스만 존재한다는 것이다.

그리하여 여기서의 a, b는 둘중 하나만 건드려도 둘다 변경되게 되는 것이다.



값 타입의 비교

  • 동일성 비교: 인스턴스의 참조 값을 비교, == 사용

  • 동등성 비교: 인스턴스의 값을 비교, equals() 사용

  • 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 함

  • 값 타입의 equals() 메소드를 적절하게 재정의 한다.(주로 모든 필드 사용)



값 타입 컬렉션 대안

  • 실무에서는 상황에 따라 값 타입 컬렉션 대신에 일대다 관계를 고려한다.

  • 일대다 관계를 위한 엔티티를 만들고, 여기에서 값 타입을 사용한다.

  • 영속성 전이 + 고아 객체 제거를 사용해서 값 타입 컬렉션 처럼 사용하자.



Reference
자바 ORM 표준 JPA 프로그래밍 - 기본편