먼저 회사 2주차쯤 리펙토링하고 싶은 코드를 보았다.
아래와 같은 코드가 AllFilter, ProjectFilter, TemporaryFilter 등등 안에 PREF_NAME 만 다르고 나머지는 똑같은 코드였다.
가독성도 떨어지고 같은 작업을 수행할거기 때문에 바꿀때 다 따로 바꿔야 하는 무지막지함을 느낄거 같다 판단하고 만져보기로 했다. 그러면서 상속과 Object에 대해 이해해 보려 한다.
자바에서 상속 방법은 아래와 같다.
class ChildClass extends ParentClass {}
코틀린에서는 상속방법은 open을 붙이는데 다음과 같다.
open class parentClass{}
만약 open이라는 키워드를 사용하지 않고 코드를 작성할 경우 에러문구가 나온다.
코틀린은 open 키워드가 없을 경우 다른 곳에서 상속 받지못하는 final class로 정의된다.
자바 | 코틀린 |
final class ParentClass{} | class parentClass{} |
class ParentClass{} | open class ParentClass{} |
코틀린에서는 상속을 명시하지 않는 경우 클래스 계층 구조 ROOT 에 위치한 Any 클래스가 상속된다.
class ClassName
class ClassName : Any()
//두개 동일
만약 안드로이드의 View 컴포넌트 처럼 부모 클래스에 기본 생성자가 없으면 각 보조 생성자는 super 키워드를 사용하여 기본 유형을 초기화 하거나 이를 수행하는 다른 생성자에 위임해야 한다. 이 경우 다른 2차 생성자는 기본 유형의 다른 생성자를 호출 할 수 있다.
class MyView: View {
constructor(ctx:Context) : super(ctx)
constructor(ctx:Context, atts:AttributeSet) : super(stx, attrs)
}
나는 결국 아래와 같이 바꾸었는데 너무 짜릿한 경험이다.