아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 #135
Replies: 1 comment 1 reply
-
스레드안정성 다들 아시겠지만 그냥 저도 정리할 겸 한번 올려봅니다. 너무 많이 나오는 개념인데 자꾸 까먹네요. ***스레드 안정성(Thread safety)***이란, 멀티 스레드 환경에서 여러 스레드가 동시에 공유하는 데이터나 자원을 안전하게 접근하고 조작하는 것을 의미합니다. 멀티 스레드 환경에서 동시에 여러 스레드가 공유하는 데이터나 자원에 대해서는 다음과 같은 문제가 발생할 수 있습니다.
이러한 문제를 해결하기 위해서는 스레드 안정성을 보장하는 방법을 사용해야 합니다. 이를 위해, 다음과 같은 방법을 사용할 수 있습니다.
스레드 안정성을 보장하지 않으면, 예상치 못한 결과를 가져올 수 있기 때문에, 멀티 스레드 환경에서는 스레드 안정성을 고려해야 합니다. |
Beta Was this translation helpful? Give feedback.
-
📝 구성
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% 맞는것은 아니다 라는 것이다.
항상 의심하고
왜
라는 질문을 스스로 답변하며 가장 좋은 방법을 선택하는 것을 지향하는 그런 개발자가 될 수 있도록 내실을 다지도록 하자.Beta Was this translation helpful? Give feedback.
All reactions