

상속의 기본 개념
상속은 어떤 클래스의 기능을 다른 클래스가 사용할 수 있게 하는 기법이다.
- 기능을 물려주는 클래스를 부모 클래스 (또는 슈퍼 클래스, 기본 클래스)라고 한다.
- 기능을 물려받는 클래스를 자식 클래스 (또는 서브 클래스, 파생 클래스)라고 한다.
Dart에서는 extends 키워드를 사용하여 상속을 구현한다.
Dart에서의 상속 구현
예를 들어, 다음과 같은 Idol 클래스가 있다고 가정해보자:
이제 Idol 클래스를 상속하는 BoyGroup 클래스를 만들어 보겠다:
class라고 하고서 상속을 받고 있는 클래스의 이름을 짓고, extends 한 다음에 부모 클래스로 모든 속성들을 상속받고 싶은 클래스를 오른쪽에다 넣어주면 된다.
그러면은 BoyGroup에서 벌써 에러가 나는데, 이 에러는 뭐냐면은 아이돌 클래스를 상속받기로 했기 때문에 이 아이돌 클래스의 생성자를 준수를 해줘야 된다.
안 그러면은 상속을 받을 수가 없다.
생성자까지 다 상속을 받는 거라고 이해하면 된다.
그래야지 이 상속받은 name과 membersCount 값들을 사용할 수가 있다.
자 그럼 이걸 어떻게 하느냐, 아래 처럼 생성자를 만들면 된다.
원래는 상속을 안했으면, 위 일반 생성장처럼 그냥 this.name에다가 저장을 시키면 된다.
하지만 BoyGroup 클래스 안에다가 변수들을 선언해놓은 게 아니고 부모 클래스인 Idol 클래스에다가 name과 membersCount 값들을 갖고 있기 때문에 이 부모 클래스를 지칭하는 키워드인 super를 알아야 된다.
name이랑 membersCount라는 변수가 현재 클래스에 있다면, 원래는 this을 사용하여 아래처럼 선언해야 하지만 그것이 아니기 때문에, this가 아니라 부모클래스를 지칭하는 super 키워들를 사용해야 한다.
지금 에러가 나는 이유는, 괄호안에다가 상속받을 클래스안에 있는 파라미터를 넣어주지 않았기 때문에 발생한다.
main() 함수에서 클래스를 사용했던 것처럼, super() 괄호안에다가도 아래 이미지처럼 부모 클래스의 값들을 지칭하는 값의 이름을 넣어주면 된다.
main()함수에 사용된 BoyGroup의 name과 membersCount의 값들이 BoyGroup의 생성자를 거치게 되고, super 키워드를 통해, 부모 클래스의 name과 membersCount에 값이 전달되게 된다.
여기서 주목해야 할 점들:
- extends 키워드 사용: class 자식클래스 extends 부모클래스 형식으로 상속을 선언한다.
- super 키워드 사용:
- super는 부모 클래스를 지칭한다 (this가 현재 클래스를 지칭하는 것과 대비된다).
- 생성자에서 super(name, membersCount)를 호출하여 부모 클래스의 생성자를 실행한다.
- 새로운 메서드 추가:
- sayMale() 메서드와 같이 자식 클래스에서 새로운 메서드를 추가할 수 있다.
상속받은 클래스 사용하기
상속받은 클래스는 다음과 같이 사용할 수 있다:
- sayName()과 sayMembersCount()는 부모 클래스(Idol)에서 상속받은 메서드이다.
- sayMale()은 자식 클래스(BoyGroup)에서 새로 추가한 메서드이다.
상속의 특성과 제한
상속에는 몇 가지 중요한 특성과 제한이 있다:
- 코드 재사용: 부모 클래스에 공통으로 사용하는 변수와 메서드를 정의하여 상속받으면, 자식 클래스들은 중복 코딩 없이 해당 기능을 사용할 수 있다.
- 상속의 제한: 만약 Idol 클래스를 상속받는 GirlGroup 클래스가 있다고 가정해보자. GirlGroup 클래스의 객체는 BoyGroup에 새로 추가한 sayMale() 메서드를 호출할 수 없다. 이는 서로 다른 자식 클래스 간에는 메서드가 공유되지 않기 때문이다.
'Dart > OOP' 카테고리의 다른 글
Dart 문법 OOP - 인터페이스 (0) | 2024.08.20 |
---|---|
Dart 문법 OOP - 오버라이드 (0) | 2024.08.20 |
Dart 문법 OOP - 게터와 세터 (0) | 2024.08.20 |
Dart 문법 OOP - private 변수 (0) | 2024.08.20 |
Dart 문법 OOP - 생성자 (0) | 2024.08.20 |

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!