ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Inheritance
    w2 2022. 9. 5. 08:58

    Inheritance

    상속! 물려받는다는 거지

    할아버지의 차를 상속 받았다. 하면 할아버지 차를 내가 쓸수 있게 되는 거잖아.

    코딩에서도 상속 받으면 상속 받은 걸 쓸수 있게 되는거.

    물론 현실세계에서의 상속은 ‘차’라는 실체를 대상으로 하기 때문에 실체에 대한 소유관계가 바뀌는 거지만

    코딩의 세계에서 상속하는 대상은 ‘클래스’ 라는 차이가 있음. 클래스는 실체가 없으니까.

     

    1

    사람 할아버지 한테서 → 사람 손자가 상속 받아.

    여기서 ‘사람’이 클래스지.

    할아버지도 손자도 사람이잖아. 공통적인 특징으로 구분할 수 있는

    자 그럼.. 할아버지, 손자는 인스턴스, 실체일까?

    땡!

     

    할아버지를 만질 수 있어?

    할아버지… 할아버지… 누구네 할아버지? 어떤 할아버지?

    마이클 이라는 이름을 가진 내 할아버지는 만질 수 있겠지

    만질 수 있다는 건 실체가 있는거니까 다시말해 마이클 할아버지는 인스턴스네.

    그럼.. 할아버지는 뭘까?

    내 할아버지 마이클도 있고, 친구 할아버지 제임스도 있고…

    할아버지는 이런 실체(인스턴스)를 만들 수 있게 정의해놓은 개념인 클래스인 거지.

     

    손자도 마찬가지~~ 손자라는 개념을 클래스로 구현하면

    마이클의 손자인 제이콥은 손자 클래스의 실체로 인스턴스가 되는거지.

     

    자.. 그럼 정리해보자…

    할아버지손자도 클래스야.

    그런대 단독으로 만들어진 클래스가 아니고 사람 클래스를 상속 받은 클래스.

     

    따라서 할아버지, 손자 클래스는 사람 클래스의 특징을 모두 가지게 돼.

    할아버지 클래스와 손자 클래스의 실체, 인스턴스인 마이클과 제이콥은

    사람 클래스를 포함하고 있으니 눈있고, 귀있고, 말하고, 쓰고 달리고를 할 수 있음!

     

    할아버지 마이클 = 할아버지 ( );

    손자 제이콥 = 손자( );

     

     

     

     

     

    2

    선생님이나 디자이너를 클래스로 만든다고 생각해보자구

    학생이나 선생님으 모두 사람이니까 사람 클래스를 상속 받게 하면

    사람 이외에 특징만 적어주면 되겠지?

     

    ‘선생님은 가르치는 사람’ 이라는 개념을 클래스로 만들려면

    선생님 클래스는 사람 클래스를 상속 받고

    클래스 내에는 “가르친다.” 라는 기능을 구현하면 ok.

     

    * dart 에서는 extends 라는 키워드를 써서 상속 받음을 표현해.

    선생님 이유나 = 선생님 ( );

    이유나.말하기 ;
    이유나.가르친다;
    이유나.디자인한다; ❌ Error
    디자이너 박미연 = 디자이너( );

    박미연.먹기;
    박미연.가르친다; ❌ Error
    박미연.디자인한다;

     

    3

    여기서 한가지!

    여러 클래스에 상속을 해줄 수는 있지만

    상속은 한 클래스에서만 받을 수 있대.

     

    할아버지가 사람 클래스를 상속 받을 수는 있지만

    사람 클래스를 상속 받으면 다른 클래스는 상속 받을 수 없어.

     

    그렇지만

    할아버지는 여러 자손(아들, 딸, 며느리, 손자 ..)에게 상속해 줄 수 있지만

    나는 한 분한테만 상속 받을 수 있다는거,

    할아버지 한테 상속 받으면 할머니나 아버지, 어머니 한테선 상속을 받을 수 없음

     

    상속 해 주는건 여러클래스에 가능하지만, 1개의 클래스에서만 상속받을수 있음

     

    용어가 헷갈리네... 

    주체에 따라서 상속을 해준다. 상속을 받는다..가 상대적이잖아.. 

    키워드가 extend 는 '확장' 인 이유가 다 있는거였어..  

     

    할아버지 클래스는 → 여러 클래스에 '상속' 해줄 수 있다. 

    손자 클래스는 ← 하나의 클래스만 (상속 받아서) '확장' 할 수 있다. ^^   

     

    4

    왜 '확장'은 1개만 할 수 있을까?

    손자 클래스가 여러 클래스를 확장할 수 있다면 문제가 생길꺼야. 

     

    할아버지 클래스를 아빠 클래스가 (상속 받아서)  확장했어. 

    할아버지 클래스에 할아버지.a = 1; 이었는대 

    아빠 클래스가 할아버지.a = 2; 로 변경했어.

     

    손자 클래스는 할아버지 클래스와 아빠 클래스를 모두 상속 받았다면 (확장) 했다면, 

    할아버지.a 의 값은 뭘까 ???? 

    할아버지 클래스에서만 확장했다면  할아버지.a 가 1 일텐데..

    아빠 클래스에서  할아버지.a 를 2 로 변경했으니... 

     

    아... 난감해..... @@  

     

    그러니... 확장은 1개만 ^^ !!!   

     

    손자 클래스가 할아버지 클래스를 확장했다면 할아버지.a = 1; 

    아빠 클래스를 확장했다면 할아버지.a = 2; 

    물론 이 값을 손자 클래스가 그래도 사용할 수도 변경할 수 있겠지 ^^ 

     

    'w2' 카테고리의 다른 글

    IDE  (1) 2022.09.10
    route  (0) 2022.09.10
    Gradle  (0) 2022.09.10
    [data type] enum  (0) 2022.09.10

    댓글

Designed by Tistory.