728x90
반응형

배열 2

[Effective Java] 아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라.

🎯 아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라. null을 반환하는 API는 사용하기 어렵고 오류 처리 코드도 늘어난다. 그렇다고 성능이 좋은 것도 아니다. 컬렉션이나 배열 같은 컨테이너가 비었을 때 null을 반환하는 메서드를 사용할 때면 항시 방어 코드를 넣어줘야 한다. 클라이언트에서 방어 코드를 빼먹으면 오류가 발생할 수 있다. 실제로 객체가 0개일 가능성이 거의 없는 상황에서는 수년 뒤에야 오류가 발생하기도 한다. 빈 컬렉션을 반환하는 올바른 예 public List getCheeses(){ return new ArrayList(cheesesInStock); } 대부분의 상황에서는 이렇게 하면 된다. 가능성은 작지만, 사용 패턴에 따라 빈 컬렉션 할당이 성능을 눈에 띄게 떨어 ..

Java 2023.03.24

[Effective Java] 아이템 28. 배열보다는 리스트를 사용하라.

🎯 아이템 28. 배열보다는 리스트를 사용하라. 배열과 제네릭 타입에는 중요한 차이가 두 가지 있다. 1️⃣ 배열은 공변이지만, 제네릭은 불공변이다. Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다. 반면, 서로 다른 타입 Type1, Type2가 있을 때, List은 List의 하위 타입도 아니고 상위 타입도 아니다. 어느 쪽이든 Long용 저장소에 String을 넣을 수는 없다. 다만 배열에서는 그 실수를 런타임에야 알게 되지만, 리스트를 사용하면 컴파일할 때 바로 알 수 있다. 2️⃣ 배열은 실체화(reify)된다. 배열은 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 확인한다. 그래서 위 코드에 보듯 Long배열에 String을 넣으려 하면 Ar..

Java 2023.03.20
728x90
반응형