companion object에 관한 질문입니다
635
작성한 질문수 48
강사님께서 "companion object에 유틸성 함수들을 넣어도 되지만, 최상단 파일을 활용하는 것을 추천한다" 라고 하셨는데, 그 근거가 무엇인지 알 수 있을까요?? 참고할 url을 알려주시면 더욱 감사하겠습니다!!!
답변 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가 있습니다! 😊😊
답변이 되었으면 좋겠네요~!! 행복한 밤 잘 마무리 하시기 바랍니다!!
감사합니다~ 🙇
수업노트
0
58
1
싱글톤과 스프링
0
74
2
get() = 3
0
53
2
강사님
0
76
1
강의 복습하면서 생긴 질문
1
97
1
Kotlin과 Java의 현업에서의 활용
0
130
2
data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문
0
75
1
코틀린에서 상속 시, 주의점에 대한 질문
1
101
3
내용 이해 질문
0
58
1
자바와 코틀린의 함수형 프로그래밍,
1
93
1
플랫폼 타입 설명 문의
2
79
2
널 아님 단언 관련 질문
0
86
1
강의 중 질문
0
81
2
범위 비교 질문
1
93
2
타입캐스팅 궁금한점 질문드립니다.
1
241
2
코틀린 val 질문
0
168
2
완강 후 Kotlin 이런저런 질문 드려봅니다!
3
411
2
확장함수 스타일 질문
0
140
2
확장 프로퍼티 질문
1
158
1
update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!
1
283
1
java class의 NotNull 어노테이션 인식
1
264
1
[16강] 확장함수 관련 질문입니다!
1
134
2
리턴타입 사용시 any를 사용해도 괜찮은가요?
1
142
1
안녕하세요 scope function 에 receiver 가 없는 경우
1
172
1





