TIL
-
List.of와 Arrays.asList의 차이TIL 2022. 3. 2. 17:26
학습동기 많이 사용하는 List 자료구조, 크기가 고정된 배열을 만들어주는 Arrays.asList를 종종 사용했는데, 자바9에 List.of가 추가되었다고 한다. 둘의 차이가 궁금해 찾아봄 학습내용 Arrays.asList는 mutable list를, List.of는 immutable list를 반환 Arrays.asList는 null원소를 허용, List.of에선 안됨 contains(null)의 결과가 다름, Arrays.asList로 만들어진 얘는 true/false, List.of는 NullPointerException 배열을 인자로 넘겨줬을때, Arrays.asList의 결과는 배열값이 바뀌면 따라바뀜, List.of는 안바뀜 결론 불변이 대세인거 같으니 List.of쓰자 출처 https://..
-
Collection에 final 예약어가 붙어도 내용이 변경될 수 있음TIL 2022. 3. 1. 22:49
학습동기 final만 붙이고 return하면 외부에서 안의 내용은 변경될 수 있다고 함 학습내용 private final List numbers; 위의 final이 보장해 주는것은 numbers의 모든 원소가 불변이라는 것이 아닌 "numbers가 참조하는 객체는 변하지 않음"이다. 따라서 getter로 numbers을 바로 리턴해주면 외부에서 numbers의 원소를 바꿀 수 있음! 결론 getter를 사용할 경우 Collections.unmodifiable~ 를 사용해 원소의 불변도 보장하자 public List getNumbers() { return Collections.unmodifiableList(this.numbers); }
-
List에 add하니 UnsupportedOperationException가 발생TIL 2022. 2. 28. 13:01
학습동기 List에 add를 하니 UnsupportedOperationException가 발생 학습내용 Arrays.asList로 만들어진 배열은 우리가 흔히 사용하는 ArrayList를 반환하는 것이 아님. 이는 add와 remove와 같은 변환과 관련된 메서드를 지원하지 않음. 따라서 UnsupportedOperationException와 같은 익셉션이 발생하는 것 결론 new ArrayList(Arrays.asList()) 를 사용하자 출처 https://stackoverflow.com/questions/5755477/java-list-add-unsupportedoperationexception
-
두 개의 List를 Map으로 압축하기TIL 2022. 2. 21. 17:05
학습동기 두 개의 List를 하나는 key, 하나는 value인 Map으로 압축하고 싶음 반복문을 이용할수도 있지만 더 좋은 방법은 없을까? 학습내용 IntStream을 사용해 구현할 수 있음 private static Map zipToMap ( List keys, List values) { return IntStream.range(0, keys.size()) .boxed() .collect(Collectors.toMap( keys::get, values::get)); } 결론 IntStream을 잘 이용하면 반복문을 좀 더 간결하게 표현할 수 있다. 출처 https://stackoverflow.com/questions/1839668/what-is-the-best-way-to-combine-two-li..
-
예외검사 로직의 적절한 위치는?TIL 2022. 2. 21. 16:39
학습 동기 예외검사(ex. 자동차 이름은 5자 이하) 로직을 아래 위치 중 어디에 두어야 하는지 고민 모든 예외검사 메서드를 하나의 클래스(ex. validator)로 모은다. 사용자 입력이니 입력을 처리하는 클래스 내부에 넣는다. 검사할 변수가 존재하는 클래스 내부에 넣는다. 학습 내용 첫번째 방법은 validator가 변경되면 도메인이 변경될 가능성이 큼 두번째 방법은 클라이언트가 바뀌면 검증로직을 다시 작성해야 함 세번째 방법이 이 중 가장 자연스럽다고 생각됨. 객체의 자율성을 향상시킴 결론 다른 코드에 최대한 영향을 끼치지 않고, 객체의 역할과 책임을 고려한 적절한 위치를 고민하자