플러터/다트 (Dart) 언어

Dart 공부하기 - 클래스 - 상속 개념 그리고 구현해보기 #1

프하하 2022. 5. 4. 00:08

상속 역시 객체지향에서 중요한 부분을 차지하고 있습니다.

 

상속이 없으면 이런 저런 클래스들을 다 만들어야하고 중복되는 기능들을 반복적으로 구현해야할 것입니다.

 

간단히 말해서 상속은 집합관계라고 생각하시면 될 것입니다. 부분집합이 딱이겠네요.

 

사람이 있고, 남자가 있고, 어린 남자아이가 있다고 쳐보면 어린 남자아이는 남자가 포함하고 있고, 남자는 사람이 포함하는 관계일 것입니다. 다른 예제로 학생이 있고, 사람이 있다라고 치면 학생은 사람에 포함될 것입니다.

 

따라서 사람의 기본적인 특성을 하나의 클래스로 구현해둔다면 학생이나, 남자, 어린아이들과 같은 클래스를 구현할 때 사람의 클래스를 상속하면 반복되는 일이 줄어들지 않을까요?

 

이런 개념을 다트 코드로 한번 구현해보도록 하겠습니다.

 

아까전에 만들어 둔 Person이라는 클래스 두 변수를 만들어 두고 나서 Student라는 클래스를 새로 만들어 extends를 활용해 Person 클래스를 상속했습니다.

 

Student의 생성자로 3개의 변수를 가져오도록 했습니다. 앞의 성과 이름은 새로 구현하고 싶지 않아서 Person 생성자의 변수를 가져오도록 했습니다.

 

이 때 사용되는 것이 super입니다. super를 사용하게 되면 생성자를 구현할 때 있어서 변수를 새로 만들지 않고도 상속하는 클래스의 변수들을 활용할 수 있게 되는 것이죠.

여기서 웃긴건 저희는 toString() 함수를 부른적도 없는데 student 객체를 print하면 저 함수가 호출된다는 점입니다.

 

테스트를 위해 toString() 함수를 toString1() 함수로 변경해서 동일한 코드를 실행해보면 Instance of 'Student'가 출력이 됩니다.

 

이상하죠? toString 함수는 자체적으로 class 내부에 구현되 있는 함수로서 override를 통해서 재정의되면 그에 따라서 출력이 됩니다. 저는 현재는 이 정도로만 알아두려고 합니다.