작성
·
567
답변 1
1
안녕하세요, 가보자!! 님 ㅎㅎㅎ 아이고~~ 좋은 질문 감사드립니다!! 🙏
바로 답변드려 보자면, 최상단 파일 활용을 추천드리는 이유는
Decompile 했을 때 정적 팩토리 메소드에 가까운 것은 최상단 함수이고,
companion object를 사용했을 때보다 타이핑 할 것이 적어 간결하기 때문입니다!!
예를 들어
class StringUtils {
companion object {
fun startsWithA(str: String): Boolean {
return str.startsWith("A")
}
}
}
위와 같은 코드를 Decompile 하여 보게 되면,
public final class StringUtils {
@NotNull
public static final Companion Companion = new Companion((DefaultConstructorMarker)null);
public static final class Companion {
public final boolean startsWithA(@NotNull String str) {
Intrinsics.checkNotNullParameter(str, "str");
return StringsKt.startsWith$default(str, "A", false, 2, (Object)null);
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
와 같이 StringUtils
클래스 안의 Companion
클래스 안의 startsWithA
함수가 만들어지죠! Companion 클래스도 '동행 객체'니까요!
반면
fun startsWithA(str: String): Boolean {
return str.startsWith("A")
}
와 같은 코드를 Decompile 하게 되면
public final class StringUtilsKt {
public static final boolean startsWithA(@NotNull String str) {
Intrinsics.checkNotNullParameter(str, "str");
return StringsKt.startsWith$default(str, "A", false, 2, (Object)null);
}
}
와 같이 저희가 생각하는 흔한(?) 유틸성 정적 메소드가 나오게 됩니다.
유틸성 코드를 작성하는 Kotlin 코드 역시 최상단에 있는것이 깔끔하고요!
유틸성 함수를 사용할 때에도 companion object 안에 있으면 StringUtils.startsWithA
를 타이핑 하는 반면 파일 최상단에 있으면 startsWithA
를 바로 사용하게 되어 더 간편합니다!!
코틀린 공식문서에는 비슷한 기능을 하는 코드이고, 소스 파일의 용량이 허용가능한 한 파일에 여러 함수를 위치시키는 것은 장려된다 (https://kotlinlang.org/docs/coding-conventions.html#source-file-organization) 라는 quote가 있습니다! 😊😊
답변이 되었으면 좋겠네요~!! 행복한 밤 잘 마무리 하시기 바랍니다!!
감사합니다~ 🙇