함수를 다루는 방법

parkrootseok·2025년 8월 15일
0

코틀린

목록 보기
14/15
post-thumbnail

확장 함수

왜 필요할까요?

대부분의 Java 라이브러리는 Java로 작성되어 있습니다. 하지만 Kotlin 개발자는 val과 var, Null-Safety 등 Kotlin의 장점을 유지한 채 Java 라이브러리를 활용하고 싶어합니다. 그러나 기존 Java 클래스에 기능을 추가하려면 상속이나 헬퍼 클래스를 사용해야 하며, 이는 번거롭고 유지보수에 불리합니다. 이 한계를 넘어 원본 수정 없이 Kotlin 스타일로 기능을 확장하기 위해 등장한 것이 확장 함수입니다.

그래서, 확장 함수는 뭔가요?

확장 함수기존 클래스의 소스를 수정하지 않고도, 마치 원래부터 그 클래스에 있던 메서드처럼 호출할 수 있게 해주는 함수입니다. 이를 통해 Kotlin과 Java의 상호 운용성을 높이고, 코드 가독성과 유지 보수성을 개선할 수 있습니다.

어떻게 쓰나요?

예시

아래와 같이 String은 원래 trimmedLength() 메서드를 가지고 있지 않지만, 확장 함수를 통해 마치 원래부터 있었던 것처럼 호출할 수 있습니다.

참고 사항

  • 수신 객체의 private 함수를 가져오면 캡슐화가 깨지지 않나요?

    • 확장 함수는 수신 객체의 private, protected 멤버에는 접근할 수 없습니다. 이는 캡슐화를 깨뜨리지 않고, 오직 public 범위 내에서만 동작함을 의미합니다.
  • 멤버 함수와 확장 함수의 시그니처가 같을 경우 무엇이 호출되나요?

    • Kotlin에서는 멤버 함수가 항상 우선합니다. 즉, 동일한 시그니처를 가진 멤버 함수와 확장 함수가 동시에 존재하면, 확장 함수는 무시되고 멤버 함수가 호출됩니다.
  • 확장 함수를 오버라이드한 경우 무엇이 호출되나요?

    • 호출되는 확장 함수는 변수의 현재 타입 즉 정적인 타입에 의해 결정됩니다.

중위 함수

중위 함수infix 라는 키워드를 활용하여 변수.함수이름(인자) 대신 변수 함수이름 인자 형태로 호출할 수 있게 해주는 함수입니다. 아래와 같이 활용할 수 있습니다.

인라인 함수

인라인 함수는 함수가 호출되는 대신 함수를 호출한 지점에 함수 본문을 그대로 복사/붙어넣기 할 수 있게 해주는 함수입니다. 아래와 같이 자바 코드로 변환된 결과를 보면, 함수를 호출하지 않고 덧셈 로직 자체가 복사/붙어넣기가 수행된 것을 알 수 있습니다.

지역 함수

지역 함수는 함수 안에 선언되어 있는 함수를 말합니다. 아래와 같이 활용할 수 있습니다.

profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글