inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

20강. 코틀린의 scope function

run의 사용 방법에 대해 궁금한 점이 있습니다

해결된 질문

619

콜라곰

작성한 질문수 7

1

안녕하세요 강사님. 완강하고 코틀린을 계속 공부하다가 궁금한 점이 생겨 질문 드립니다.

 

run의 경우에는 아래와 같이 확장함수가 아닌 일반적인 메소드의 형태로 정의된 것이 있는 것을 발견했습니다.

그래서 메소드를 작성할 때 run을 사용해서 작성할 수도 있겠다는 생각이 들더라구요. 예시로 Int의 확장함수로 거듭제곱을 수행하는 pow()라는 메소드를 작성할 때 보통은 다음과 같이 작성하겠죠.

fun Int.pow(n: Int): Long {
    var result = 1L
    repeat(n) { result *= this }
    return result
}

그런데 위의 run을 사용해서 아래처럼 작성할 수도 있었고 두 경우 모두 같은 결과를 반환하는 것을 볼 수 있었습니다.

fun Int.pow(n: Int) = run {
    var result = 1L
    repeat(n) { result *= this }
    result
}

 

그러면 메소드를 작성할 때 두가지 방법 모두 사용할 수 있다고 생각되는데, 어느쪽을 사용하는 것이 좋은 방법일지 강사님의 의견을 듣고싶어서 질문 남겨봅니다.

java kotlin 객체지향

답변 1

1

최태현

안녕하세요, 콜라곰님!! 이번에도 좋은 질문 감사드립니다! 😊

말씀해주신 것처럼 run 의 경우에는 1) 확장함수 run 도 존재하고 2) 일반함수 run 도 존재합니다. 또한, 둘 모두 적절하게 함수의 선언부와 구현부(body)를 이어주는데 활용할 수 있죠!

질문 주신 내용에 대해 답변 드려보자면, 저 같은 경우는 아래 1번 2번 중 1번 형태를 선호하는 편입니다!

// 1번
fun Int.pow(n: Int): Long {
    var result = 1L
    repeat(n) { result *= this }
    return result
}
// 2번
fun Int.pow(n: Int) = run {
    var result = 1L
    repeat(n) { result *= this }
    result
}

그 이유가 특별하게 존재하는 것은 아니고요! 아무래도 Java를 먼저 하고 와서 1번에 제게 더 익숙한 것 같습니다. 실제로 두 기능은 거의 차이가 없기 때문에 run 을 사용해 작성된 함수를 보더라도 꼭 바꾸어야 할 필요성을 느끼지는 않습니다 ㅎㅎㅎ

답변이 도움이 되었을지 모르겠네요! 함께 협업하는 상황이라면, Team Convention이 중요한 부분인 것 같습니다! 언제든 또 편하게 질문 주세요~~ 감사합니다!!! 🙏🙏

1

콜라곰

항상 친절한 답변 감사드립니다!

수업노트

0

58

1

싱글톤과 스프링

0

74

2

get() = 3

0

52

2

강사님

0

75

1

강의 복습하면서 생긴 질문

1

97

1

Kotlin과 Java의 현업에서의 활용

0

129

2

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

0

75

1

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

1

100

3

내용 이해 질문

0

58

1

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

1

92

1

플랫폼 타입 설명 문의

2

78

2

널 아님 단언 관련 질문

0

86

1

강의 중 질문

0

81

2

범위 비교 질문

1

93

2

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

1

241

2

코틀린 val 질문

0

168

2

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

3

411

2

확장함수 스타일 질문

0

140

2

확장 프로퍼티 질문

1

158

1

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

1

283

1

java class의 NotNull 어노테이션 인식

1

264

1

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

1

134

2

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

1

142

1

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

1

172

1