플러터를 사용하기 위해서는 다트라는 언어를 익혀야 하는데, 이 문법은 자바와 아주 유사하여 자바를 알고 있다면 더 배우기 쉽습니다.
그런데 오히려 코틀린을 사용하고 더 익숙한 사용자라면 다트랑 비슷비슷해서 조금씩 틀린고 갑자기 헷갈릴 수 있는데 그럴 수 있습니다. 저도 지금도 그러고 있고요 특히 마지막에 자꾸 ";"를 까먹어서 에러가 나네요
아무튼 상속도 자바와 아주 유사 아니 똑같아서 자바를 알고 있다면 한번 보는 것으로도 충분히 이해할 수 있을 거라 생각이 듭니다.
다트에서의 상속 하기
자바와 마찬가지로 클래스를 생성할 때 클래스 이름 옆에 extends를 붙여서 상속을 받습니다.
일단 상속을 받기 전에 부모 클래스를 먼저 만들어야 합니다. 이 또한 자바와 같습니다
class Sample{
String name;
int age;
Sample({
required this.name,
required this.age,
});
void sayName() {
print('저는 ${this.name}입니다');
}
void sayAge() {
print('저의 나이는 ${this.age} 입니다.');
}
}
코틀린으로 넘어오면서 생성자를 위와 같이 잘 안 쓰게 되는데 오랜만에 저렇게 생성자를 생성해 보네요
생성자의 required는 non-nullable로 null이면 안 되는 값을 의미합니다. 저도 다트에서 처음 보는 것으로 저도 저 정도로만 알고 있습니다.
위와 같이 부모 클래스를 생성한 후 자식 클래스에 상속을 합니다.
class Boy extends Sample{
Boy(
String name,
int boyAge,
): super(
name: name,
age: boyAge);
void sayBoy() {
print('저는 남자 입니다.');
}
}
자바와 마찬가지로 클래스 이름 옆에 extends를 붙인 후 부모 클래스를 쓰면 상속이 됩니다.
생성자의 경우 super를 쓰게 되는데 super는 부모클래스를 의미합니다.
이렇게 상속을 받게 되어 boy에서 부모 클래스에서 만든 메소드를 호출할 수 있습니다.
부모 클래스의 메소드를 오버라이딩하여 재사용할 수 도 있습니다. 오버라이딩 개념 또한 상속을 통해 나옵니다.
마무리
호출 및 생성하는 방법도 자바와 동일합니다.
void main(){
Sample sample = Sample(name: 'mader', age: 33);
Boy boy = Boy('mader2', 23);
print(boy is Sample);
}
위와 같이 호출 및 생성을 할 수 있으며, 부모클래스를 바로 생성할 수 도 있으며, 상속받은 클래스도 생성할 수 있습니다.
부모클래스의 생성자는 required를 사용하였기에, 생성 시 반드시 파라미터 이름을 입력해주어야 합니다 -> name: 'mader'
이런 식으로 하여야 하며, 안 할 시 에러가 발생합니다.
boy는 Sample 클래스를 상속받았기에 부모클래스에 있는 메소드를 호출할 수 있으며, is를 통해 타입을 확인해보면 부모클래스이기도 합니다. 그래서 true가 떨어집니다.
그리고 Boy클래스이기도 하기에 is를 통해 Boy 클래스인지 확인을 해보며 이 또한 true가 떨어지게 됩니다.
위의 sample과 boy는 서로 다른 객체이며, 메모리 위치도 다르기에 서로 데이터를 공유하거나 꼬이는 일이 없습니다.
상속의 경우 잘 사용을 하게 되면 재사용성도 늘어나게 되고 유지보수 시에도 많은 이점이 될 수 있습니다.
많은 라이브러리에도 상속을 받아서 사용해야 하는 라이브러리가 존재하며 꼭 알고 있어야 할 개념이라고 생각이 됩니다.
'[# 2]…My DevelopStory' 카테고리의 다른 글
안드로이드 뷰모델, 솔직히 이것만 알면 된다 ~ Android Viewmodel (0) | 2023.01.10 |
---|---|
다트언어 인터페이스 사용하기 ~ Dart Interface Implements (0) | 2022.12.22 |
안드로이드 FCM(Firebase Cloud Messaging) 이해하기 (0) | 2022.12.10 |
안드로이드 엑티비티 / 프레그먼트 라이프사이클 ~ Android Activity / Fragment LifeCycle (0) | 2022.12.05 |
안드로이드 4대 컴포넌트 ~ Android Component (0) | 2022.12.04 |