APP/Dart

dart 객체지향 프로그래밍 Override란?

개발자 aloe 2022. 8. 16. 17:50
728x90
//method - function (class 내부에 있는 함수)
즉 클레스 내부에 함수가 있으면 그걸 메서드라고 부름 어떤 OOP 에서도 마찮가지임 
 
 
// override - 덮어쓰다 (우선시 하다)

override는 상속 받은 자식에서 가능 한거임 

 

void main() {
  TimesTwo tt = TimesTwo(2);
  print(tt.calculate());

  TimesFour tf = TimesFour(2); // 부모꺼 이용 가능 
  print(tf.calculate());
  
}
//method - function (class 내부에 있는 함수)
// override - 덮어쓰다 (우선시 하다)

class TimesTwo{
  final int number;

  TimesTwo(
  this.number,  // 생성자 간단한 문법 바로 값을 this 클레스 안 number 변수로 바로 값 넣음 
  );

  int calculate(){
    return number *2;
  }
}

class TimesFour extends TimesTwo{
  TimesFour(
    int number  
  ) : super(number);  // 부모생성자에도 바로 값 넣음 

}

그래서 둘다 현제 2넣으면 그 값에 2를 곱한 값을 반환 하는것을 확인 할수 있음 

 

근데 만약 자식놈에서 int calculate(){} 라는 똑같은 시그니처 함수를 작성하면 자식에서 부모 클레스에 정의된 함수를 
  override - 덮어쓰다 (우선시 하다) 할수 있는것임 

 

void main() {
  TimesTwo tt = TimesTwo(2);
  print(tt.calculate());

  TimesFour tf = TimesFour(2); // 자식에서 override - 덮어쓰다 한거 이용
  print(tf.calculate());
  
}
//method - function (class 내부에 있는 함수)
// override - 덮어쓰다 (우선시 하다)

class TimesTwo{
  final int number;

  TimesTwo(
  this.number,  // 생성자 간단한 문법 바로 값을 this 클레스 안 number 변수로 바로 값 넣음 
  );

  int calculate(){
    return number *2;
  }
}


class TimesFour extends TimesTwo{
  TimesFour(
    int number  
  ) : super(number);

  @override  // 즉 매소드 덮으쓰는거임 
  int calculate(){
    return super.number * 4;   // 요게 정석임
    // 부모거에 * 4  결론적으로 생성자를 통해 값 을 부모에서 선언한 변수로 넣고 그 값에 *4로 만들어 준거임
	// return this.number * 4; 이렇게 해도됨 그냥 자식에도 저장되는거라 이렇게 사용 해도 무방 
    // super.calculate() * 2; 이런식으로도 작성 가능함 (부모 꺼 이용) 즉 부모것을 활용하려고 하면 이렇게도 가능
  }
}

super.calculate() * 2;  이렇게 쓰면 부모것을 활용해서 새로운 로직을 구현할때 편함 이렇게 해주면 나중에 부모 계산 기능이 복잡하다면 코드를 효율적으로 줄일수도 있을것임  
728x90