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
- 제임스고슬링
- 인수테스트
- 블랙잭 회고
- throw 와 throws 차이
- 프로젝트 패키지 구조
- JXM
- 자바로 만들수 있는 것
- Getter Setter
- 자바의 종류
- 우테코
- 우아한테크코스
- 방어적 복사
- 우테코4기
- 리스코프치환원칙
- 객체지향적인 설계
- PR 오류
- There isn't anything to compare.
- 자바 버전 다운 그레이드
- 자바 4334
- java 1000번 A+B
- 테스트 성능 개선
- Oracle JDK와 OpenJDK의 차이
- 상수와 Enum
- ServiceTest
- 윤년계산하기
- 자판기미션
- 백준
- 상근날드
- JDK
- ControllerTest
Archives
- Today
- Total
개발새발
List.copyOf 란? 본문
방어적 복사에 대해 공부하다가 읽기 전용 List 를 반환하는 unmodifiableList 에 대해서 알게 되었다.
그리고 List.copyOf 또한 읽기 전용 List 를 반환한다는 것을 알게 되었다. 조금 더 자세히 파악해보자.
public List<Card> getValue() {
return List.copyOf(value);
}
내부 구현 로직
내부 구현 로직을 살펴보니 unmodifiableList 와 똑같이 get 을 제외한 다른 메서드를 호출 할 경우
에러를 던지도록 구현했다. 차이점은 List 원본을 복사한 값을 읽기 전용으로 만든다.
private ImmutableCollections() { }
/**
* The reciprocal of load factor. Given a number of elements
* to store, multiply by this factor to get the table size.
*/
static final intEXPAND_FACTOR= 2;
static UnsupportedOperationException uoe() { return new UnsupportedOperationException(); }
static abstract class AbstractImmutableCollection<E> extends AbstractCollection<E> {
// all mutating methods throw UnsupportedOperationException
@Override public boolean add(E e) { throwuoe(); }
@Override public boolean addAll(Collection<? extends E> c) { throwuoe(); }
@Override public void clear() { throwuoe(); }
@Override public boolean remove(Object o) { throwuoe(); }
@Override public boolean removeAll(Collection<?> c) { throwuoe(); }
@Override public boolean removeIf(Predicate<? super E> filter) { throwuoe(); }
@Override public boolean retainAll(Collection<?> c) { throwuoe(); }
}
// ---------- List Implementations ----------
// make a copy, short-circuiting based on implementation class
@SuppressWarnings("unchecked")
static <E> List<E> listCopy(Collection<? extends E> coll) {
if (coll instanceof AbstractImmutableList && coll.getClass() != SubList.class) {
return (List<E>)coll;
} else {
return (List<E>)List.of(coll.toArray());
}
}
참고
'우아한테크코스 > level1' 카테고리의 다른 글
Command Pattern ( 커멘드 패턴) (0) | 2022.04.03 |
---|---|
방어적 복사vs Unmodifiable vs copyOf 의 차이점 (1) | 2022.03.21 |
unmodifiableList 란? (0) | 2022.03.21 |
방어적 복사란? (0) | 2022.03.21 |
[레벨1] 블랙잭 회고 (2) | 2022.03.21 |