A 모듈에서 다음과 같이 inline 함수가 있다고 가정해 보겠습니다. B 모듈에서는 해당 함수를 사용할 수 있습니다.
inline fun calculateResult(input: Int): Int {
return input * 42
}
A 모듈에서 더 복잡한 코드를 작성하기 위해서 함수를 별도로 만들었습니다.
internal fun complexCalculation(input: Int): Int {
// ...복잡한 로직 생략
return input * 42
}
inline fun calculateResult(input: Int): Int {
return complexCalculation(input)
}
그러면 이제 다음과 같은 에러가 발생하면서 컴파일 되지 않습니다.
Error: Cannot access 'internalFunction': it is internal in 'Module A'
internal은 모듈 내부에서만 접근할 수 있는데, inline함수는 함수 본문이 호출 위치에 복사되므로 B 모듈에서는 internal 함수에 대한 접근 권한이 없으므로 컴파일 오류가 발생합니다.
이때 해당 함수를 internal을 지워서 해결할 수도 있지만, 해당 함수를 공개하고
싶지는 않을 수 있습니다. 이때 @PublishedApi
를 사용할 수 있습니다.
@PublishedApi
internal fun complexCalculation(input: Int): Int {
// ...복잡한 로직 생략
return input * 42
}
inline fun calculateResult(input: Int): Int {
return complexCalculation(input)
}
이러면 해당 함수를 공개하지 않으면서, inline 함수 내의 internal 멤버에 접근할 수 있게 됩니다. 따라서 컴파일 오류가 발생하지 않고, inline 함수의 이점을 그대로 사용할 수 있습니다.
자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지 - OAuth 2.0 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!