run의 사용 방법에 대해 궁금한 점이 있습니다
안녕하세요 강사님. 완강하고 코틀린을 계속 공부하다가 궁금한 점이 생겨 질문 드립니다.
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
}
그러면 메소드를 작성할 때 두가지 방법 모두 사용할 수 있다고 생각되는데, 어느쪽을 사용하는 것이 좋은 방법일지 강사님의 의견을 듣고싶어서 질문 남겨봅니다.
답변 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이 중요한 부분인 것 같습니다! 언제든 또 편하게 질문 주세요~~ 감사합니다!!! 🙏🙏
수업노트
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





