우당탕탕 무작정 앱 개발하기

일반인의 Flutter 앱개발 8. Dart(Class : 상속 Inheritance, Override)

간다간다숑간다 2022. 10. 9. 00:01
728x90

이번 강의 엄청 강조했다. OOP의 꽃 같은 상속이다.


상속(Inheritance)

상속을 얼마나 잘 쓰느냐에 따라 코딩의 퀄리티가 달라진다고 하니 개념을 잘 잡고 가자.

상속(Inheritance)

기본적으로 부모님이 자녀에게 상속을 할 때는 부모의 모든 것이 자녀에게 가는 개념인데

코딩에서도 마찬가지로 적용된다.

 

부모 클래스의 모든 속성을 자식 클래스가 부여받는다.
자식 클래스의 속성은 부모 클래스에 부여할 수 없다.

Dart_Inheritance

오늘의 뼈대는 이놈에서 시작한다. 아이돌이라는 부모 클래스에서 남돌, 여돌 클래스로 상속하며 연습을 할 것이다.


남돌 자녀 클래스

Dart_Inheritance

자 이제 대망의 자녀 클래스를 생성해 보자. 자녀 클래스의 이름은 BoyGroup이고

상속받고자 하는 부모 클래스는 extends 다음에 지정해주면 된다. 

 

부모 클래스는 이름과 멤버 수를 받는 변수가 있는데 자녀에는 없지 않은가?

우리는 부모 클래스로부터 변수를 받아서 쓸 것이다. 그렇기에 super라는 키워드가 등장하는데,

super 키워드는 부모 클래스에 있는 name과 membersCount에 값을 지칭하는 것이다.

 

이제 잘 적용이 되는지 돌려보자.

Dart_Inheritance

bts라는 자식 클래스 인스턴스를 생성하며 BTS, 7 값을 넣어줬다.

BoyGroup에는 name과 membersCount 변수가 없지만 super 키워드를 통해 제대로 쓰였음을 확인했다.

 

그럼 자녀 클래스에만 함수를 넣는 건 어떨까?

 

Dart_Inheritance

부모 클래스에는 sayMale이라는 함수는 없지만 자녀 클래스에는 있다.

결과는

Dart_Inheritance

잘 적용된다.

그렇다면 blackPink에는 적용될까?

Dart_Inheritance

자녀 클래스는 부모 클래스로 상속할 수 없기에 bts 고유 함수는 sayMail은 블랙핑크가 쓸 수 없었다. 다행히


여돌 자녀 클래스

Dart_Inheritance

BTS 자녀 클래스와 함수 이름만 다르고 정확히 같은 클래스를 만들어줬다.

Dart_Inheritance

자녀 클래스끼리는 속성을 갖다 쓸 수 있을까?

레드벨벳한테 남돌이라고 말해보라고 했으나 거절당했음을 볼 수 있다.

거절당한 코드가 없으면 예상했던 결과를 볼 수 있다.

부모와 자식 간 상속의 결과 테스트

Dart_Inheritance_Type_comparison

블랙핑크는 아이돌이 맞지만 보이그룹도 아니고 걸그룹도 아니다(여기선)

BTS는 아이돌이고 보이그룹이다

레드벨벳은 아이돌이고 걸그룹이다.

라는 결과를 볼 수 있다.

혹시 방금 이 부분이 이해가 안 간다면 다시 읽어보며 이해를 하고 넘어가자.

나중에 이 부분을 사용할 일이 분명 있으니 배워두자 꼭


 

Method Override 

이번에는 메서드 오버라이드에 대해 배워보자. 간단히 용어 정리를 해보면

Method = function(class 내부에 있는 함수)
Override는 덮어쓰다(우선시하다.)

override를 연습할 기본 코드는 이것이다.

Dart_method_override

super 기억나는가? 방금 위에서 하고 왔었다. super는 부모 클래스의 속성을 쓸 때 쓰는 키워드이다.

 

이 프로그램을 돌리면 결과는 어떻게 나올까?

그렇다 4, 4 가 나올 것이다.

override를 하고 싶을 땐 @override로 사용하면 된다.

그렇다면 오버라이드를 해보기 위해 주석 처리한 부분을 살려보자.

 

Dart_method_override

이렇게 살려내면 결과는 어떻게 나올까?

생각할 시간을 주겠다.

override를 하면 TimesFour에서 다시 만들어준 calculate() 함수로 쓰이기 때문에

 

이렇게 나오게 된다.

Dart_method_override

override는 안 써줘도 문법상 괜찮지만 직관적으로 override 했다는 것을 알기 위해 써주는 것이 좋다.

 

틀린 점이나 궁금한 점이 있으면 댓글로 알려달라.
입문자라 아무것도 모르고 이상한 소리를
썼을 가능성이 매우 매우 농후하다.
궁금한 점은 댓글로 토론하며 정답을 찾아보자.
코드팩토리님의  Dart강의를 보고 공부 중입니다.
728x90