inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

19강 TakeIf 질문

196

LEE-YOONSEON

작성한 질문수 3

2

강사님 안녕하세요.

우선, 좋은 강의 감사합니다.

 

19강.코틀린의 이모저모 학습 중 이해되지 않는 부분이 있어서 질문드립니다.

takeIf 을 설명하실 때

getNumberOrNull 함수와 getNumberOrNullV2 함수가 동일한 코드라고 설명해주셨는데요.

강의에서 takeIf 확장 함수는 주어진 조건을 만족하면 그 값을, 만족하지 않는다면 null을 반환한다고 설명해주셨는데, 그러면 getNumberOrNull함수의 반환 값이 반대로 된 것이 아닌가요?

 

오히려 getNumberOrNull함수는 takeUnless를 사용하는 getNumberOrNullV3함수와 동일하다고 생각됩니다.

저는 아래와 같이 이해했는데.. 혹시 제가 잘못 이해한건지, 아니면 강의자료에 오타가 있으신건지 궁금합니다~~


// takeIf 구현
fun getNumberOrNull(): Int? {
    return if (number <= 0) number // 해당 조건이 맞으면 해당 값을 반환
           else null // 아니면 Null을 반환
}

java kotlin 객체지향

답변 1

1

최태현

안녕하세요! LEE-YOONSEON님! 🙂 질문 주셔서 감사합니다!

 

결론부터 말씀드리면 강의 자료가 맞습니다!

잘 보시면 takeIf에는 조건이 it > 0 으로 되어 있습니다. 즉, number 가 양수일 때 number 를 반환하는 것이죠

그리고 if else 문으로 되어 있는 코드 또한 number가 양수일 때 number를 반환하도록 되어 있습니다.

fun getNumberOrNull(): Int? {
  return if (number <= 0) {
    null
  } else { // 양수일 때 nuber 반환
    number
  }
}

 

실제로 아래 코드를 돌려보시면 쉽게 확인할 수 있습니다!

fun main() {
    println(getNumberOrNull(3)) // 3
    println(getNumberOrNull(-1)) // null

    println(getNumberOrNullV2(3)) // 3
    println(getNumberOrNullV2(-1)) // null

}

fun getNumberOrNull(number: Int): Int? {
    return if (number <= 0) {
        null
    } else {
        number
    }
}

fun getNumberOrNullV2(number: Int): Int? {
    return number.takeIf { it > 0 }
}

 

추가로 여기서 드러나는 사실 한 가지가 있는데요!

Kotlin에서 제공하는 기능이 있더라도 기존의 if else문의 가독성이 더 좋은 경우가 있다는 것입니다.

특히 takeIf, takeUnless 혹은 scope function을 썼을 때보다 전통적인 방식을 사용하는 것이 더 간결할 때가 있죠.

 

답변이 도움이 되었으면 좋겠습니다.

감사합니다! 🙏

1

LEE-YOONSEON

앗... 조건을 제대로 확인 못했네요.. 답변 감사합니다!

추가로 상황 마다 다르겠지만, 강의에서 말씀하셨던 것과 같이 코틀린에서 제공하는 기능이 있더라도 가독성이 더 좋은 경우를 생각하면서 좋은 코드를 작성해보도록 하겠습니다ㅎㅎ

수업노트

0

52

1

싱글톤과 스프링

0

71

2

get() = 3

0

49

2

강사님

0

74

1

강의 복습하면서 생긴 질문

1

93

1

Kotlin과 Java의 현업에서의 활용

0

122

2

data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문

0

72

1

코틀린에서 상속 시, 주의점에 대한 질문

1

95

3

내용 이해 질문

0

56

1

자바와 코틀린의 함수형 프로그래밍,

1

91

1

플랫폼 타입 설명 문의

2

74

2

널 아님 단언 관련 질문

0

83

1

강의 중 질문

0

79

2

범위 비교 질문

1

91

2

타입캐스팅 궁금한점 질문드립니다.

1

239

2

코틀린 val 질문

0

166

2

완강 후 Kotlin 이런저런 질문 드려봅니다!

3

408

2

확장함수 스타일 질문

0

138

2

확장 프로퍼티 질문

1

156

1

update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!

1

283

1

java class의 NotNull 어노테이션 인식

1

261

1

[16강] 확장함수 관련 질문입니다!

1

130

2

리턴타입 사용시 any를 사용해도 괜찮은가요?

1

138

1

안녕하세요 scope function 에 receiver 가 없는 경우

1

168

1