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