Java/자바 몰랐던 내용

자바 방어적복사와 불변객체의 생성에 대하여

Razelo 2021. 1. 4. 17:48

자바 방어적 복사

https://johngrib.github.io/wiki/defensive-copy.md/

 

방어적 복사 (defensive copy)

검사시점/사용시점 취약점을 방어하자

johngrib.github.io

 

방어적 복사는 즉

매개변수의 유효성을 검사하기 전에 방어적 복사본을 만들고, 이 복사본으로 유효성을 검사한 점에 주목하자. 순서가 부자연스러워 보이겠지만 반드시 이렇게 작성해야 한다. 멀티스레딩 환경이라면 원본 객체의 유효성을 검사한 후 복사본을 만드는 그 찰나의 취약한 순간에 다른 스레드가 원본 객체를 수정할 위험이 있기 때문이다. 방어적 복사를 매개변수 유효성 검사 전에 수행하면 이런 위험에서 해방될 수 있다. 컴퓨터 보안 커뮤니티에서는 이를 검사시점/사용시점(time of check/time of use) 공격 혹은 영어 표기를 줄여서 TOCTOU 공격이라 한다.

(위 블로그에서 인용)

 

라고 말할 수 있다. 그리고

가장 쉽게 방어적 기법을 설계하는 법은 Collections unmodifiable... 시리즈를 이용하는 것이다.

 

unmodifiable 시리즈에 대해서 더 알아보자. 즉 이 시리즈는 불변객체와도 연관되어 있다.

https://velog.io/@conatuseus/Java-Immutable-Object%EB%B6%88%EB%B3%80%EA%B0%9D%EC%B2%B4

 

[Java] Immutable Object(불변객체)

면접에서 "자바에서 불변객체에 대해 설명해주세요.."라는 질문을 받았다.속으로 'final만 붙이면 불변객체 아닌가?'라는 생각을 했지만 불변객체에 대해 공부하지 않아 모른다고 했다...그래서

velog.io

 

 

불변컬렉션 생성에 관해 (자바 9까지 포함)

https://www.daleseo.com/java9-immutable-collections/

 

Java9의 불변 컬렉션 생성

Engineering Blog by Dale Seo

www.daleseo.com

 

반응형