We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Originally posted by bunsung92 February 22, 2023 📝 구성
Table of contents generated with markdown-toc
아래와 같은 getCheeses() 메서드가 있다고 생각 해 보자.
getCheeses()
public List<Cheese> getCheeses() { return cheesesInStock.isEmpty() ? null : new ArrayList<>(cheesesInStock); }
해당 메서드는 null을 반환할 수 있으므로, null 을 리턴 받게 된 다음 이어질 로직에서는 null을 대비하는 방어 코드를 작성해야 한다.
이보다 좋은 방법은 없을까? 이제부터 알아보자.
사실 개발자가 처리하고 대비해야 할 null은 수 없이 많다. 물론 하나하나 다 처리해야한다. 그러나 이제는 위와 같이 특수한 상황(List나 배열등의 컬렉션등을 리턴하는 상황에서 null 값을 깡으로 리턴하는)에는 아래와 같은 방법을 사용해 보자.
null 대신에 다음과 같이 빈 컬렉션을 반환할 수 있다.
public List<Cheese> getCheeses() { return new ArrayList<>(cheesesInStock); }
null 을 반환하는 코드랑 크게 다르지 않지만 이는 분명 이점이 있다.
첫째, null 대신 빈 컬렉션을 반환하더라도 성능 차이가 크지 않다. 둘째, 빈 컬렉션은 굳이 새로 할당하지 않고도 반환할 수 있다.
근데 이 마저도 만석 지하철을 3번 보내면은 화가 나는 해당 아이템을 정리 중인 본인 입장에서는 불편하다. 바로 아무리 성능 차이가 크지 않다 하더라도 빈 컬렉션의 반환에 사용된 new 키워드 때문이다. 너무 보기 싫은데 어떻게 방법이 없을까?
한번 더 방법을 찾아보자.
Collections 를 이용하면 빈 불변 컬렉션을 반환할 수 있다.
public List<Cheese> getCheeses() { return cheesesInStock.isEmpty() ? Collections.emptyList() : new ArrayList<>(cheesesInStock); }
Collections.emptyList() 가 반환하는 빈 불변 컬렉션은 다음과 같은 특징이 있다.
Collections.emptyList()
첫째, 불변이기 때문에 Thread Safe 하다. 둘째, 항상 동일한 싱글톤 인스턴스를 반환한다. 셋째, null 값이 리턴되어 오게 될 Side Effect 를 위한 방어적인 코드 작성도 피하게 해준다.
Side Effect
방어적인 코드 작성
배열은 더 간단하다.
빈 배열을 반환하거나, 길이 0 배열을 미리 선언해두고 불변인 배열을 만들어 사용하면 된다.
언젠가 메서드에 null 을 반환하고 있다면 null 이 아닌 빈 배열이나 컬렉션을 반환하자. 왜냐하면 null 을 반환하는 메서드는 처리하기 까다로우며 코드의 복잡도가 증가하고 가독성이 떨어지는 문제가 있을 수 있다.
2023.02.23 목
null 처리의 대가는 Optional로 알고 있었다. 하지만 이번 장을 정리하며 그리고 앞전 다른 아이템들을 정리하며 알게 된 사실들은 내가 알고있는 모든 사실이 항상 모든 경우에 100% 맞는것은 아니다 라는 것이다.
항상 의심하고 왜라는 질문을 스스로 답변하며 가장 좋은 방법을 선택하는 것을 지향하는 그런 개발자가 될 수 있도록 내실을 다지도록 하자.
왜
내용 출처 https://stackoverflow.com/questions/12597277/why-would-someone-use-collections-emptylist-in-java https://github.com/Meet-Coder-Study/book-effective-java/blob/main/8%EC%9E%A5/54_null%EC%9D%B4_%EC%95%84%EB%8B%8C_%EB%B9%88_%EC%BB%AC%EB%A0%89%EC%85%98%EC%9D%B4%EB%82%98_%EB%B0%B0%EC%97%B4%EC%9D%84_%EB%B0%98%ED%99%98%ED%95%98%EB%9D%BC_%EC%B5%9C%EB%9D%BD%EC%A4%80.md
내용 출처
https://stackoverflow.com/questions/12597277/why-would-someone-use-collections-emptylist-in-java https://github.com/Meet-Coder-Study/book-effective-java/blob/main/8%EC%9E%A5/54_null%EC%9D%B4_%EC%95%84%EB%8B%8C_%EB%B9%88_%EC%BB%AC%EB%A0%89%EC%85%98%EC%9D%B4%EB%82%98_%EB%B0%B0%EC%97%B4%EC%9D%84_%EB%B0%98%ED%99%98%ED%95%98%EB%9D%BC_%EC%B5%9C%EB%9D%BD%EC%A4%80.md
The text was updated successfully, but these errors were encountered:
Irisation23
No branches or pull requests
Discussed in https://github.com/orgs/Study-2-Effective-Java/discussions/135
Originally posted by bunsung92 February 22, 2023
📝 구성
Table of contents generated with markdown-toc
0. 들어가기에 앞서 🤔
아래와 같은
getCheeses()
메서드가 있다고 생각 해 보자.해당 메서드는 null을 반환할 수 있으므로, null 을 리턴 받게 된 다음 이어질 로직에서는 null을 대비하는 방어 코드를 작성해야 한다.
이보다 좋은 방법은 없을까?
이제부터 알아보자.
1. null이 아닌, 빈 컬렉션이나 배열을 반환하라 ✨
사실 개발자가 처리하고 대비해야 할 null은 수 없이 많다. 물론 하나하나 다 처리해야한다.
그러나 이제는 위와 같이 특수한 상황(List나 배열등의 컬렉션등을 리턴하는 상황에서 null 값을 깡으로 리턴하는)에는 아래와 같은 방법을 사용해 보자.
1.1 빈 컬렉션을 반환
null 대신에 다음과 같이 빈 컬렉션을 반환할 수 있다.
null 을 반환하는 코드랑 크게 다르지 않지만 이는 분명 이점이 있다.
근데 이 마저도 만석 지하철을 3번 보내면은 화가 나는 해당 아이템을 정리 중인 본인 입장에서는 불편하다.
바로 아무리 성능 차이가 크지 않다 하더라도 빈 컬렉션의 반환에 사용된 new 키워드 때문이다.
너무 보기 싫은데 어떻게 방법이 없을까?
한번 더 방법을 찾아보자.
1.2 빈 불변 컬렉션 반환
Collections 를 이용하면 빈 불변 컬렉션을 반환할 수 있다.
Collections.emptyList()
가 반환하는 빈 불변 컬렉션은 다음과 같은 특징이 있다.1.3 배열
배열은 더 간단하다.
빈 배열을 반환하거나, 길이 0 배열을 미리 선언해두고 불변인 배열을 만들어 사용하면 된다.
2. 핵심정리 📚
언젠가 메서드에 null 을 반환하고 있다면 null 이 아닌 빈 배열이나 컬렉션을 반환하자.
왜냐하면 null 을 반환하는 메서드는 처리하기 까다로우며 코드의 복잡도가 증가하고 가독성이 떨어지는 문제가 있을 수 있다.
3. 회고 🧹
2023.02.23 목
null 처리의 대가는 Optional로 알고 있었다.
하지만 이번 장을 정리하며 그리고 앞전 다른 아이템들을 정리하며 알게 된 사실들은 내가 알고있는 모든 사실이 항상 모든 경우에 100% 맞는것은 아니다 라는 것이다.
항상 의심하고
왜
라는 질문을 스스로 답변하며 가장 좋은 방법을 선택하는 것을 지향하는 그런 개발자가 될 수 있도록 내실을 다지도록 하자.The text was updated successfully, but these errors were encountered: