Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- 우테코
- 우아한테크코스
- There isn't anything to compare.
- 자바의 종류
- 자바 4334
- Getter Setter
- throw 와 throws 차이
- 객체지향적인 설계
- 테스트 성능 개선
- 상수와 Enum
- Oracle JDK와 OpenJDK의 차이
- PR 오류
- 리스코프치환원칙
- 방어적 복사
- 인수테스트
- ControllerTest
- java 1000번 A+B
- 프로젝트 패키지 구조
- 우테코4기
- 제임스고슬링
- 자판기미션
- JDK
- 자바로 만들수 있는 것
- 상근날드
- ServiceTest
- 자바 버전 다운 그레이드
- 블랙잭 회고
- JXM
- 윤년계산하기
Archives
- Today
- Total
개발새발
방어적 복사vs Unmodifiable vs copyOf 의 차이점 본문
학습 동기 📝
리뷰어 분께서 데이터를 보호하기 위해서 방어적 복사를 사용해보는 것은 어떨까요? 라는 피드백을 주셨다.
관련 공부를 하다보니 방어적 복사, UnmodifiableList, copyOf 이 세가지 개념이 비슷한 구석이 있어 정리해보았다.
학습 내용 📖
세가지 개념에 대한 정리 내용은 링크로 대체한다.
방어적 복사 vs Unmodifiable vs copyOf 요약
- 방어적 복사 : 객체를 새로 생성해서 반환함, 원본에 대한 참조는 끊기지만,원본 내 또다른 객체들에 대한 참조는 유지됨.
- Unmodifiable : 읽기 전용으로 반환함. 원본과 참조는 유지
- copyOf : 기존 값을 복사한 후 읽기 전용으로 반환함 원본과 참조 끊김
내가 생각하는 쓰임새 🤔
방어적 복사
객체에 대한 참조를 끊어준 뒤, 추가적인 삽입, 삭제 연산이 가능하기 때문에 맨 처음 생성자에서 객체에 값을 대입할 때 사용하는 것이 좋다고 생각한다.
public Cards(List<Card> cards) {
this.cards = new ArrayList<>(cards);
}
Unmodifiable
Getter 와 같이 반환 값에 대해 읽기만 가능하게 의도할 때 사용하는 것이 좋다고 생각한다. 그러나 참조가 살아있기 때문에 가능하면 copyOf 를 사용하는 것이 좋지 않을까?
public List<Card> getValue() {
return Collections.unmodifiableList(value);
}
copyOf
Getter 에서 사용하기 최적합인 듯하다.
public List<Card> getValue() {
return List.copyOf(value);
}
➡️ 결론 🤓
생성자 에서는 방어적 복사 를 사용하고, getter 에서는 List.copyOf 를 사용하자.
참조
'우아한테크코스 > level1' 카테고리의 다른 글
Command Pattern ( 커멘드 패턴) (0) | 2022.04.03 |
---|---|
List.copyOf 란? (0) | 2022.03.21 |
unmodifiableList 란? (0) | 2022.03.21 |
방어적 복사란? (0) | 2022.03.21 |
[레벨1] 블랙잭 회고 (2) | 2022.03.21 |