Java to Kotlin (15) - 다양한 함수를 다루는 방법

이동명·2024년 6월 24일
0

kotlin

목록 보기
15/19
post-thumbnail

확장함수

코틀린은 Java와 100% 호환하는 것을 목표로 하고 있다.

기존 Java 코드 위에 자연스럽게 코틀린 코드를 추가할 수는 없을까?

Java로 만들어진 라이브러리를 유지보수, 확장할 때 Kotlin 코드를 덧붙이고 싶을 때 사용한다.

아래는 마치 String 클래스 안에 있는 것 같은 확장함수 코드이다.

  • 함수사용을 위해 fun 키워드 사용
  • String. 으로 클래스 확장
  • 함수 안에서는 this(수신객체)를 통해 인스턴스에 접근 가능

원래 String에 있는 멤버함수 처럼 사용할 수 있다.

이런 의문이 생길 수 있다.
확장함수가 public이고, 확장함수에서 수신객체클래스의 private 함수를 가져오면 캡슐화가 깨지는거 아닌가?

해답은

확장함수는 클래스에 있는 private 또는 protected 멤버를 가져올 수 없다!

또한 멤버함수와 확장함수의 시그니처가 같다면?

멤버함수가 우선적으로 호출된다

(확장함수를 만들었지만, 다른 기능의 똑같은 멤버함수가 생기면? 오류가 발생할 수 있다)

확장함수가 오버라이드 된다면?

해당 변수의 현재 타입
즉, 정적인 타입에 의해 어떤 확장함수가 호출될지 결정된다

Java에서 Kotlin 확장함수를 가져다 사용할 수 있나?

(정적 메소드를 부르는 것처럼 사용 가능하다)

infix 함수

중위함수, 함수를 호출하는 새로운 방법

위의 확장함수는 아래처럼 사용 가능

infix 키워드가 들어가면 아래처럼 사용가능

inline 함수

함수가 호출되는 대신, 함수를 호출한 지점에 함수 본문을 그대로 복붙하고 싶은 경우.

사용하는이유

  • 함수를 파라미터로 전달할 때에 오버헤드를 줄일 수 있다.
  • 하지만 inline 함수의 사용은 성능 측정과 함께 신중하게 사용되어야 합니다

지역함수

함수 안에 함수를 선언할 수 있다.

위의 중복되는 if 문을 아래처럼 수정할 수 있다.

  • 함수로 추출하면 좋을 것 같은데, 이 함수를 지금 함수 내에서만 사용하고 싶을 때
  • 하지만 depth가 깊어지기도 하고, 코드가 그렇게 깔끔하지는 않다.

다음은 코틀린에서 람다를 다루는 방법을 공부해보겠습니다.

profile
Web Developer

0개의 댓글