기본값 타입
String name
,int age
와 같은 값생명 주기가 Entity에 의존한다.
회원을 삭제하면 이름, 나이도 함께 삭제된다.
값 타입은 공유하면 안된다.
회원 이름 변경 시 다른 회원의 이름도 변경되면 안된다.
참고
자바의 기본 타입(int, double 등)은 절대로 공유하지 않는다.
항상 값을 복사해서 사용한다.
public class ValueMain {
public static void main(String[] args) {
int a = 10;
// a에 있는 값이 복사가 되어서 b에 할당된다.
// a와 b는 완전히 별도의 저장 공간을 가지고 있다.
// 즉, 공유되지 않는다.
int b = a;
a = 20;
// a = 20, b = 10
// a의 값이 복사가 돼서 b로 들어갔기 때문에 b는 변경되지 않는다.
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
기본 타입은 공유되지 않기 때문에 사이드 이펙트가 없다.
즉, 내 이름을 바꿨다고 다른 사람의 이름이 바뀌지는 않는다.
public class ValueMain {
public static void main(String[] args) {
Integer c = 10;
// c의 참조값만 넘어간다.
Integer d = c;
// setValue()는 존재하지 않는 메서드지만 있다고 가정하고 값을 변경한다.
// 이렇게 사용하면 레퍼런스를 넘겨서 같은 인스턴스를 공유하기 때문에 둘 다 값이 바뀐다.
// 하지만 이런 메서드를 제공하지 않으므로
// 즉, 값을 변경할 수 있는 방법이 없으므로 사이드 이펙트가 일어나지 않는다.
c.setValue(20);
System.out.println("c = " + c);
System.out.println("d = " + d);
}
}
클래스는 레퍼런스를 가져가기 때문에 공유가 된다.
따라서 Integer 같은 wrapper 클래스나 String 같은 특수한 클래스는 공유 가능한 객체다.
하지만 변경 자체가 불가능하기 때문에 사이드 이펙트를 막을 수 있다.
Last updated
Was this helpful?