인프런 커뮤니티 질문&답변

kimseunghwan7777님의 프로필 이미지
kimseunghwan7777

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

질문

해결된 질문

작성

·

273

0

OOP 강의에서 상속 공부하던 중 의문이 생겨 질문 드립니다.

void main() {
  print('-------------Idol-------------');
  Idol apink = Idol(name: "에이핑크", members_count: 5);

  apink.say_name();
  apink.say_members_count();
//   apink.say_male();  - 이건 X
  
  print('-------------boy_group-------------');
  
  boy_group bts = boy_group('bts',7);
  bts.say_name();
  bts.say_members_count();
  bts.say_male();
  
  print('-------------girl_group-------------');
  
  girl_group red_velvet = girl_group('Red Velvet',5);
  red_velvet.say_name();
  red_velvet.say_members_count();
  red_velvet.say_female();
  
  print('-------------type_comparison-------------');
  print(apink is Idol);
  print(apink is boy_group);
  print(apink is girl_group);
  
  print('-------------type_comparison2-------------');
  print(bts is Idol);
  print(bts is boy_group);
  print(bts is girl_group);
  
  print('-------------type_comparison3-------------');
  print(red_velvet is Idol);
  print(red_velvet is boy_group);
  print(red_velvet is girl_group);
  
  
}

// 상속 - inheritance
//
// 상속을 받으면, 부모 클래스의 모든 속성을 자식 클래스가 부여받는다.

class Idol {
  //이름
  String name;
  //멤버 숫자
  int members_count;

  Idol({
    required this.name,
    required this.members_count,
  });

  void say_name() {
    print("저는 ${this.name}입니다.");
  }

  void say_members_count() {
    print("${this.name}은 ${this.members_count}명의 멤버가 있습니다.");
  }
}

// super가 부모를 의미하는!
class boy_group extends Idol {
  boy_group(
    String name,
    int members_count,
  ) : super(   
          name: name,
          members_count: members_count,
        );
  // 밑의 super(~~) 이것이 Idol(~~) 을 의미하는 것임! 즉, 부모의 constructor 의미하는 것!
  
  void say_male(){
    print("저는 남자아이돌입니다");
  }
}

class girl_group extends Idol {
  girl_group(
    String name,
    int members_count,
  ) : super(   
          name: name,
          members_count: members_count,
        );
  // 밑의 super(~~) 이것이 Idol(~~) 을 의미하는 것임! 즉, 부모의 constructor 의미하는 것!
  
  void say_female(){
    print("저는 여자아이돌입니다");
  }
}

여기에서는 name : name을 함으로써, 자식 class에서 받은 name을 부모 class의 name으로 복사해준다/넣어준다고 하셨는데, 그 다음 코드

void main() {
  TimesTwo tt = new TimesTwo(2);
  print(tt.calculate());
  
  TimesFour tf = new TimesFour(2);
  print(tf.calculate());
  
}

// method : function인데, class 내부에 있는!
// override - 재정의 (우선시하다. 덮어쓰다)

class TimesTwo {
  final int number;

  TimesTwo(
    this.number,
  );

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

class TimesFour extends TimesTwo {
  TimesFour(
    int number,
  ) : super(number);  // 
  
  @override   //생략해도 되는데, 예의상 기입한다.
  int calculate() {
//     return super.number * 4;
    return super.calculate() * 2;   // 이것도 가능!
  }
  
}

이 내용을 보면, 부모class는 그냥 number인 것이 왜 그런 것이지 잘 이해가 안 됩니다. number:number가 아닌 이유가 어떤 것일까요?? named(required)의 여부가 이를 결정한 것일까요??

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

말씀하신 number: number는 named parameter를 말씀하시는 것 같습니다.

현재 TimesTwo 클래스는 positional parameter를 받고 있기 때문에 positional parameter를 사용해주셔야합니다.

감사합니다!

 

kimseunghwan7777님의 프로필 이미지
kimseunghwan7777

작성한 질문수

질문하기