1. 기본형과 참조형의 공유
- 기본형 : 하나의 값을 여러 변수에서 절대로 공유하지 않는다.
- ex) int a = 10; , int b = a 이경우 a는 복사하여 b에 대입한다.
- 참조형 : 하나의 객체를 참조값을 통해 여러 변수에서 공유 할 수 있다.
2. 공유 참조와 사이드 이펙트
- 사이드 이펙트(Side effect) : 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수 효과를 일으키는 것을 말한다.
소스 코드
package lang.immutable.address;
public class Address {
private String value;
public Address(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "Address{" +
"value='" + value + '\'' +
'}';
}
}
package lang.immutable.address;
public class RefMain_1 {
public static void main(String[] args) {
// 참조형 변수는 하나의 인스턴스를 공유
Address a = new Address("서울");
Address b = a;
System.out.println("a = " + a);
System.out.println("b = " + b);
b.setValue("부산");
System.out.println("부산 -> b");
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
- 위 코드에서 b를 부산으로 바꿀경우 a의 주소역시 부산으로 바뀐다. 두 객체는 같은 참조값을 가지고 있기 때문이다.
- 사이드 이펙트가 발생한다.
- 물론 서로 영향을 안받는 방법은 존재한다. 두 객체가 참조값을 공유하지 않게 각자의 객체를 생성하면된다.
3. 불변 객체
- 불변(Immutable) 객체
- 이름 그대로 처음 만든 이후 상태가 변하지 않는다는 뜻이다.
- 가변(Mutable) 객체
- 처음 만든 이후 상태가 변할 수 있다.
- 객체의 공유참조는 막을 수 없지만, 사이드 이펙트 발생하면 안되는 상황이라면 불변객체를 만들어서 사용하면 해결할 수 있다.
4. 불변 객체의 값 변경
package lang.immutable.change;
public class ImmutableObj {
private final int value;
public ImmutableObj(int value) {
this.value = value;
}
public ImmutableObj add(int addValue) {
int result = value + addValue;
return new ImmutableObj(result);
}
public int getValue() {
return value;
}
}
- 불변객체의 값은 변경할 수 없는데 다음과 같은 방법을 사용하면 변경할 수 있다.
- 위 코드를 보면 add()메서드에서 불변객체의 변수에 addValue를 더해준다.
- return값을 잘 보면 새로운 객체를 생성하여 반환한다.
- 이러한 방식으로 값을 변경해줄수있다.
'Java' 카테고리의 다른 글
| Java 중급 1 - Wrapper Class (0) | 2025.02.24 |
|---|---|
| Java 중급 1 - String (0) | 2025.02.14 |
| JAVA 중급 1 - Object 클래스 (0) | 2025.02.14 |
| Java 기본 - 다형성과 설계 (0) | 2025.01.30 |
| Java 기본 - 다형성 1 (2) | 2025.01.22 |