자바에서 등장하는 방어적 복사와 불변객체 생성에 대한 내용을 알아보도록 하자.
용어가 어렵지만 사실 내용은 그다지 어려운 내용은 아니다.
방어적 복사는 즉
매개변수의 유효성을 검사하기 전에 방어적 복사본을 만들고, 이 복사본으로 유효성을 검사한 점에 주목하자. 순서가 부자연스러워 보이겠지만 반드시 이렇게 작성해야 한다. 멀티스레딩 환경이라면 원본 객체의 유효성을 검사한 후 복사본을 만드는 그 찰나의 취약한 순간에 다른 스레드가 원본 객체를 수정할 위험이 있기 때문이다. 방어적 복사를 매개변수 유효성 검사 전에 수행하면 이런 위험에서 해방될 수 있다. 컴퓨터 보안 커뮤니티에서는 이를 검사시점/사용시점(time of check/time of use) 공격 혹은 영어 표기를 줄여서 TOCTOU 공격이라 한다.
(위 블로그에서 인용)
라고 말할 수 있다. 그리고
가장 쉽게 방어적 기법을 설계하는 법은 Collections 의 unmodifiable... 시리즈를 이용하는 것이다.
아래 블로그에서 많은 도움을 받았다.
감사합니다.
https://tecoble.techcourse.co.kr/post/2021-04-26-defensive-copy-vs-unmodifiable/
https://johngrib.github.io/wiki/defensive-copy/
https://velog.io/@conatuseus/Java-Immutable-Object%EB%B6%88%EB%B3%80%EA%B0%9D%EC%B2%B4
https://www.daleseo.com/java9-immutable-collections/
'Java' 카테고리의 다른 글
[Java] class 와 public class의 차이 (0) | 2021.01.04 |
---|---|
[Java] Junit과 테스트 주도 개발(TDD) 그리고 리팩토링 (0) | 2021.01.04 |
[Java] 자바 관련 좋은 블로그 (0) | 2021.01.02 |
[Jaa] 자바 디자인 패턴 대충 끄적인 내용 (0) | 2021.01.02 |
[Java] 객체지향 디자인패턴 (0) | 2021.01.02 |