본문 바로가기
공부/이펙티브코틀린

아이템 13 - Unit? 을 리턴하지 말라

by 띵커베르 2024. 4. 7.
728x90
  • Boolean 의 true, false 를 갖는 것처럼 Unit? 은 Unit 또는 null 이라는 값을 가질 수 있다.
    따라서 Boolean 과 Unit? 타입은 서로 바꿔서 사용할 수 있다.
    • 위 방법대로 Unit? 을 Boolean 을 표현하는 것은 예측하기 어려운 코드를 만들 수 있다.
    • 따라서 Boolean 을 사용하는 형태로 변경하는 것이 좋다.
  • 기본적으로 Unit? 을 리턴하거나, 이를 기반으로 연산하지 않는 것이 좋다.

 


  • 언제 Unit? 을 사용할까?
    • Unit? 을 사용하는 경우는 매우 드물다.
    • Unit 은 자바의 void 와 유사한 개념이며, 묵시적으로 모든 함수에서 반환된다
    • Unit? 을 사용하는 것이 권장되지 않는 이유는 해당 타입이 함수가 때때로 아무것도 하지 않는 상태를 null 로 표현해야 한다는 것을 의미하기 때문인데 좀 더 나은 설계로 회피 할 수 있다.
    • 그럼에도 불구하고 특정 상황에서 Unit? 을 사용해야할 경우가 있는데 아래와 같은 상황이 있을 수 있다.
      • 하지만 대부분 Boolean 같은 식으로 반환으로 대체가 가능하다.

 

  • Unit 타입
    • Java 의 void 와 비슷한 역할을 하지만 다른 특징을 가지고 있다.
    • void 와 다르게 실제 타입으로 취급된다
    • 일급 객체로서의 Unit
      • Unit 은 코틀린에서 일급 객체로 취급된다.
      • 변수에 할당할 수 있고 함수의 인자로 전달하거나 함수에서 반환값으로 사용할 수 있다.
    • 제네릭과의 호환성
      • 코틀린에서 제네릭을 사용할 때, 모든 타입은 객체로 취급된다.
      • Unit 타입은 이러한 제네릭 시스템과의 호환성을 보장한다.
      • 예) 어떤 함수가 모든 타입의 값을 반환할 수 있어야 하지만 특정 조건에서는 아무런 유의미한 값을 반환하지 않아야 할 때 Unit 을 반환함으로써 사용할 수 있.
    • 함수형 프로그래밍 지원
      • Unit 타입은 함수가 명시적으로 아무것도 반환하지 않음 을 표현할 수 있게 해줘, 순수함 함수 스타일을 가능하게 하며, 코드의 예측 가능성과 재사용성을 높여줌
    • 더 나은 API 설계
      • Unit 타입은 API 설계시 함수의 의도를 더 명확하게 전달할 수 있도록 해준다.
      • 예) 어떤 함수가 부수 효과만을 목적으로 하고 호출자에게 어떠한 값도 제공하지 않는 것을 Unit 반환타입 통해 명시적으로 나타낼 수 있다.
      • 이는 API 사용자가 함수의 사용방법과 기대하는 것을 예측할 수 있게 해준다.

 


 

정리:

  • 기본적으로 Unit? 을 리턴하거나, 이를 기반으로 연산하지 않는 것이 좋다

 

생각:

  • Unit? 을 리턴하는 함수는 만들어 본 적이 없는거 같고 Boolean 을 이용해서 처리했던거 같다.
  • 추후 API 스팩을 제공할때 Unit 타입을 반환해야할때는 Unit 타입을 명시해 주면 좋겠다고 생각 함.
728x90

댓글