Java
Java의 Stack도 방어적 복사(defensive copy)를 해야할까?
쪼앤
2021. 3. 9. 00:12
우선 우리는 불변 객체를 사용하는 것을 권장한다. 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체를 말한다. 만약, 객체의 내부 상태를 제공하는 메소드를 지원하는 경우 방어적 복사를 통해 제공한다. 그렇다면, 방어적 복사란 무엇일까?
방어적 복사란?
내부의 상태를 제공하는 메소드를 지원하는 경우 (ex. getter) 외부와 내부에서 주소값을 공유하는 인스턴스의 관계를 끊어주기 위해 사용된다. 우선, 아래의 예시 코드를 보자.
public class TestClass{
private final List<String> strings;
public TestClass() {
strings = new ArrayList<>();
}
public List<String> getStringsWithoutDefensiveCopy() {
return strings;
}
public List<String> getStringsWithDefensiveCopy() {
return new ArrayList<>(strings);
}
}