[Dart] Object Oriented Programming - 상속

yeahsilver·2023년 6월 20일
0
post-thumbnail

상속이란 무엇인가?

  • 객체 지향 관점에서 클래스를 정의하는 방식
  • 다른 클래스를 가지고 와 수정할 경우가 발생한다면, 해당 클래스를 직접 수정하는 대신 상속을 받아 변경하고자 하는 부분만 변경

예시

  • Shape라는 이름의 클래스를 생성

    class Shape {
      String? color;
    
      void giveSides({required int noOfSide}){
        print('$noOfSide Sides with $color Color');
      }
    }
    
  • Shape의 경우 원, 정사각형, 직사각형 등 여러가지 도형을 그릴 수 있음

  • 만약 삼각형을 그리고 싶은 경우, extends 키워드를 사용하여 아래와 같이 클래스를 정의하면 shape의 특성을 가진 삼각형을 생성할 수 있음

    class Triangle extends Shape {}
    
  • 위와 같이 삼각형 클래스를 생성하였다면, Shpae 클래스의 속성과 메소드에 접근 가능

    class Shape {
      String? color;
    
      void giveSides({required int noOfSide}){
        print('$noOfSide Sides with $color Color');
      }
    }
    
    class Triangle extends Shape{}
    
    void main() {
      final triangle = Triangle();
      triangle.color = 'Red';
      triangle.giveSides(noOfSide: 3);
    }
    

상속의 종류

  • 상속에는 4가지 종류가 존재
    - Single Level 상속
    • Multi Level 상속
    • 계층 상속
    • 다중 상속

Single Level 상속

  • 하나의 클래스만 상속받고 있는 상태
    class Parent {}
     class Child extends Parent {}

Multi Level 상속

  • 여러 계층을 상속받고 있는 상태
    	class A {}
    	class B extends A {}
    	class C extends B {}

계층 상속

  • 하나의 클래스를 여러 서브 클래스가 상속 받고 있는 상태

    class Shape {
      String? color;
    
      void giveSides({required int noOfSide}){
        print('$noOfSide Sides with $color Color');
      }
    }
    
    class Triangle extends Shape {
      void area (int l, int h){
         print(1/2*l*h);
      }
    }
    
    class Square extends Shape {
      void area (int s){
         print(s*s);
      }
    }
    
    class Circle extends Shape {
      void area (int radius){
         print(3.14*radius*radius);
      }
    }
    
    /*              Shape
                      |
           .---------.---------.
    Triangle    Square     Circle
    
    */

다중 상속

  • extends 키워드를 통해서는 하나의 클래스가 여러 클래스를 상속할 수 없음

  • 여러 클래스를 상속하기 위해 mixins 또는 with 키워드 사용

    class A {}
    
    class B {}
    
    class C with A,B {}

Extends, with, implement의 차이점

  1. extends

    • 하나의 클래스만 상속할 수 있음
    • 상속 받은 모든 클래스의 속성 및 메소드를 구현할 필요 없음
    • 클래스를 더욱 디테일하게 만들고 싶을 때 주로 사용
  2. with

    • 여러 클래스를 상속받을 수 있음
    • 상속 받은 모든 클래스의 속성 및 메소드를 구현할 필요 없음
    • 여러 클래스를 사용하고 싶거나, 강제적으로 모든 구현부를 사용하고 싶지 않을 경우 사용
  3. implement

    • 여러 클래스를 상속받을 수 있음
    • 상속 받은 모든 클래스의 속성 및 메소드를 구현해야함
    • 부모 클래스의 타입을 상속받고 싶은 경우 사용

Reference

profile
Hello yeahsilver's world!

0개의 댓글