Replies: 2 comments 1 reply
-
방어적 복사란 생성자에서 인자로 받은 값을 복사해 초기화하거나 접근자를 통해 참조타입의 객치를 내보낼 때 복사 후 내보내는 것을 말한다. 외부의 영향으로부터 객체 내부의 값을 보호하기 위해 사용한다. 생성자의 인자로 넘겨받은 참조 타입을 바로 초기화 해 필드 값으로 사용한다면 외부에서 해당 객체에 대해 변화를 가할 경우 영향을 받게 되어 문제가 발생한다. 참조 타입의 필드를 복사 없이 바로 내보낼 경우에도 외부에서 참조 값에 대해 변화를 시도할 위험성이 있으므로 문제가 발생할 수 있다. 따라서 이를 방지하기 위해 방어적 복사를 사용한다. 방어적 복사는 깊은 복사가 아니기 때문에 원본 컬렉션 내부 필드에서 변화가 일어날 경우 영항을 받게 된다. 컬렉션에 대한 새로운 참조값을 얻어내 끊었을 뿐 내부 필드의 참조값까지 새로 얻어낸 건 아니기 때문에 위와 같은 문제가 발생할 수 있다. 이를 해결하기 위해서는 내부 필드까지 모두 immutable이 보장되게 만들어야 한다. |
Beta Was this translation helpful? Give feedback.
-
방어적 복사란 참조 타입을 복사하여 처리하는 것을 의미합니다. 해당 방식의 목적은 참조가 끊기지 않아 외부(메서드)에서 참조 객체를 사용할 경우 의도치 않은 사이드 이팩트를 방지하는 것입니다. |
Beta Was this translation helpful? Give feedback.
-
.
Beta Was this translation helpful? Give feedback.
All reactions