inflearn logo
강의

Course

Instructor

Kotlin 76 with examples

중위함수, to/onto

Resolved

415

sson

2 asked

1

안녕하세요, 자바/파이썬 개발자는 아니지만 안드로이드 앱개발을 위해 코틀린 문법을 교육 중인 수강생입니다.

친절하신 설명과 더불어 바로 실습할 수 있는 강의자료 덕에 좀 더 이해도 있는 수업을 진행할 수 있어 감사드립니다. 실습 도중 문의사항이 있어 글 남깁니다.

중위함수 강의 중 4번 주석 설명에서 to 와 onto는 같은 일을 한다고 하여, 3에도 적용시켜본 코드입니다. 4-1에서는 잘 작동하지만 3-1 코드는 정상 작동하지 않습니다.. 그 이유를 알고 싶습니다.

  val pair = "자바" to "오라클"                                // 3
  println(pair)
  
  val pair1 = "자바1".to("오라클1")
  println(pair1)
  
  val pair2 = "자바2" onto "오라클2"                         // 3-1
  println(pair2)

  infix fun String.onto(other: String) = Pair(this, other)   // 4
  val myPair = "코틀린" onto "젯브레인스"
  println(myPair)
  
  infix fun String.to(other: String) = Pair(this, other)     // 4-1
  val myPair1 = "코틀린1" to "젯브레인스1"
  println(myPair1)

android kotlin backend

Answer 1

0

hatemogi

먼저, 수강 및 예리한 질문 감사드립니다.

말씀하신대로 해당 infix 함수는 확장 함수 형태이면서, 지역 함수로 선언했습니다.

infix fun String.onto(other: String) = Pair(this, other) // 4

원래 있는 to함수를 따라한 함수를 똑같이 infix 함수로 만든건데요, 문제는 이게, main함수 안에서 지역함수로 선언했다는 점입니다. 지역함수는 마치 지역 변수를 선언한 상황처럼, 선언한 스코프에서, 그리고 선언 이후에만 유효합니다.

val a = "Hello"
println(a) // 1
println(b) // 2
val b = "World"

여기서 2번이 b를 선언하기 전에 사용한 것과 마찬가지라고 이해해주시면 좋을 것 같아요.

해당 infix 확장함수를 아예 main함수 바깥으로 꺼내면 둘 다 정상 작동합니다. 지역함수의 특징 때문에 질문해주신 것 같습니다. https://kotlinlang.org/docs/functions.html 여기에 지역함수에 대한 설명도 살짝 나오는데, 선언 이후에만 유효하다는 얘기는 따로 나오지 않았습니다. 지역 변수의 선언과 마찬가지이기 때문에 별도의 설명은 생략한 것 같습니다.

도움이 되셨기를 바라며, 이후 과정도 응원드립니다!

1

sson

이해했습니다. 빠른 답변 감사합니다😄

Jib 빌드가 83%에서 멈추는 문제 해결(windows 사용자)

1

12

0

미션 제출 방식 건의

0

28

0

트랜잭션 내 Redis I/O 에 대한 궁금한점

1

25

1

미션 진행 방식에 대한 질문입니다.

0

47

1

getOrCreate / Unique? 멱등 처리 질문

1

59

2

경쟁상태

0

49

1

stmt

0

41

1

파킹 페이지와 대기열 큐 질문입니다.

0

46

1

소리

0

37

1

조회 메서드에서 @Transactional(readOnly=true) 질문

1

41

1

"폴더를 찾을 수 없습니다." 라는 응답만 계속 나옵니다.

0

43

1

해당 결제 부분을 포폴에서 테스트 api를 적용에 대한 궁금증

1

46

1

verify.sh 4단계 실패 — Jenkins 컨테이너에서 127.0.0.1:6443 connection refused

0

62

2

안녕하세요.

0

52

1

소스파일

0

44

1

11강 [실습] Docker로 MySQL1 분만에 실행하기

0

87

2

11강 [실습] Docker로 MySQL1 분만에 실행하기

0

63

2

isInterrupted 질문 있다.

0

34

1

구현 방법에 대한 문의

0

81

2

RunIdIncrementer batch 5랑 6랑

1

61

2

강의 자료를 받아볼 순 없겠나

1

78

2

Null 안정성 관련 질문

0

72

1

코틀린은 왜 final이 기본으로 선택한건가요?

1

571

1

맵 Map, 변환 map 강의가 동일합니다. 확인부탁드립니다.

2

426

1