반응형

오늘 스터디한 부분은 '상속' 이라는 개념으로, 지난 스터디에 이어서 class스터디이다.

소스로 들어가기전에 '상속'이라는 단어를 먼저 알고가야 한다.


※상속이란 

1. 뒤를 이음.

2. 일정한 친족 관계가 있는 사람 사이에서, 한 사람이 사망한 후에 다른 사람에게 재산에 관한 권리와 의무의 일체를 이어 주거나, 다른 사람이 사망한 사람으로부터 그 권리와 의무의 일체를 이어받는 일.


위와 같이 정의되고 있다. 하지만 프로그래밍 언어에서의 상속이 위 사전적 내용과 백퍼센트 일치하진 않지만

어느정도의 내용을 가지고 가기 때문에, 반드시 기억하고 스터디를 시작할 필요는 있다.

먼저 상속이란것에 대해 알아보기 위해, class하나를 선언해보자.

void main(){

}

class Color {
  String name;
  String group;
  
  Color({
    String name,
    String group,
  }):this.name=name,
     this.group = group;
  
  void sayName(){
    print("이 색은 ${this.name}입니다.");
  }
  
  void sayGroup(){
    print("그룹은 ${this.group}입니다");
  }
  
}

생성자와 함수를 가지는 간단한 class하나를 준비한다.

다음으로, 상속을 알아보기 위해, class하나를 더 준비한다.

class Fruit extends Color{
   //1. Color클래스의 모든것을 상속받을수 있다.
  Fruit(
    String name,
    String group
  ):super ( // <- 2. 여기서 super는 부모 class를 지칭한다.
    name : name,
    group : group
  ); 
  //<- 3. 이 class가 생성될때, 받는 파라미터를 
  //부모color클래스에 name과group에 넣어준다는것.
  
  void sayCategory(){
    print("여름과일입니다");
  }
}

새로 만든 Fruit 클래스에서는 extends라는 용어를 사용하여 Color클래스를 상속받고 있다. (1번)

여기서 extends의 좌측에는 자식클래스명, 우측에는 부모클래스명을 작성하여 상속받는 클래스 형태를 만든다.

2번을 보면 기존에 this.name = name 형태로 작성되었지만, 지금은 super라고 지정하는 형태를 볼수있다.

여기서 super는 상속받은 부모클래스를 지칭하는 것이며, 해석하자면 Fruit클래스의 생성자에서 

생성당시 받는 파라미터를 부모클래스인 Color의 name과 group에 할당한다. 라는 의미이다.

main 함수에서 실행하여 알아보자.

void main(){
	//color클래스 선언
	Color color = new Color(name:'red',group:'A');
    
    //color클래스 정상동작 확인
    color.sayName();
    color.sayGroup();
    
    //자식클래스로 사용될 fruit클래스를 summer와 melon 파라미터를 넣어서 생성
    Fruit fr = new Fruit('SUMMER','MELON');
    
    //아래 결과를 실행
    print(fr.name);
    print(fr.group);
    
    
}
SUMMER
MELON

Fruit클래스가 생성될때, 받은 SUMMER와 MELON은 생성자를 통해 Color클래스의 name과 group으로 지정되면서

위와 같은 결과값이 나올수 있게되는것이다.

부모클래스로부터 상속을 받을때는 반드시 super키워드를 이용하여 부모클래스의 정보를 입력해주어야 하고

입력해주지 않으면 null값이 표현된다.

 

또한 Fruit클래스는 Color클래스를 상속받았기때문에 Color클래스에 있는 함수를 불러와서 사용할수 있다.

Fruit fr = new Fruit('SUMMER','MELON');
fr.sayName(); //color클래스에 있는 sayName()함수
이 색은 SUMMER입니다.

이렇듯 부모클래스를 상속받아서 정의된 자식클래스는 반드시 생성자를 통해 부모클래스의 정보를 할당하고,

부모클래스의 함수를 그대로 받아서 사용할수 있다는것을 확인하였다.

여기서 중요한 참고사항으로, 자식은 부모클래스를 상속받으면 부모클래스가 가지고 있는 함수와 변수를 

사용할 수 있지만, 반대로 부모클래스는 자식클래스의 변수나 함수를 사용할 수 없다. (중요)

또한, 하나의 부모클래스는 여러개의 자식클래스를 가질수 있으나, 자식클래스는 하나의 부모클래스만 가질수 있다.

 

과연 어디서 이 기능을 사용하는가...? 있어서 좋은점은...? 이런 의문은 곧 다룰 여러예제들을 통해 파악하겠다.

상속 스터디 끝.

반응형

+ Recent posts