Dart 언어 오답노트 : 22. 상속 시 인스턴스의 타입

샤워실의 바보·2023년 10월 25일
0
post-thumbnail
class Idol {
  final String name;
  final int membersCount;

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

  void sayName() {
    print('저희는 $name입니다.');
  }

  void sayMembersCount() {
    print('$name은/는 $membersCount명의 멤버가 있습니다.');
  }
}

class BoyGroup extends Idol {
  BoyGroup(String name, int membersCount)
      : super(name: name, membersCount: membersCount);
}

class GirlGroup extends Idol {
  GirlGroup(String name, int membersCount)
      : super(name: name, membersCount: membersCount);
}

void main() {
  BoyGroup bts = BoyGroup('BTS', 7);
  GirlGroup redVelvet = GirlGroup('red velvet', 5);
  bts.sayMembersCount(); 
  bts.sayName(); 
  print(bts is Idol);
  print(bts is BoyGroup);
  print(bts is GirlGroup);
  print('==========================');
  redVelvet.sayMembersCount();
  redVelvet.sayName();
  print(redVelvet is Idol);
  print(redVelvet is BoyGroup);
  print(redVelvet is GirlGroup);
}

is 키워드는 Dart에서 객체의 타입을 확인하는 데 사용됩니다. 객체가 특정 클래스의 인스턴스인지 여부를 확인할 때 사용할 수 있습니다.

위에서 제공한 코드 예시에서 BoyGroupGirlGroup은 모두 Idol 클래스를 상속받고 있습니다. 이 말은 BoyGroupGirlGroup의 모든 인스턴스는 Idol의 인스턴스이기도 하다는 것을 의미합니다.

이를 is 키워드를 사용하여 확인할 수 있습니다.

BoyGroup bts = BoyGroup('BTS', 7);
print(bts is Idol); // 출력: true
print(bts is BoyGroup); // 출력: true
print(bts is GirlGroup); // 출력: false

GirlGroup redVelvet = GirlGroup('Red Velvet', 5);
print(redVelvet is Idol); // 출력: true
print(redVelvet is BoyGroup); // 출력: false
print(redVelvet is GirlGroup); // 출력: true

위의 예시에서 볼 수 있듯이:

  • bts 객체는 BoyGroup의 인스턴스이며, BoyGroupIdol을 상속받기 때문에 bts is Idoltrue를 반환합니다.
  • btsBoyGroup의 인스턴스이므로 bts is BoyGrouptrue를 반환합니다.
  • 하지만, btsGirlGroup의 인스턴스가 아니기 때문에 bts is GirlGroupfalse를 반환합니다.

동일한 방식으로 redVelvet 객체에 대해서도 확인할 수 있습니다. redVelvetGirlGroup의 인스턴스이고 GirlGroupIdol을 상속받기 때문에 redVelvet is Idoltrue를 반환합니다. 그러나 redVelvetBoyGroup의 인스턴스가 아니기 때문에 redVelvet is BoyGroupfalse를 반환합니다.

이러한 방식으로 is 키워드를 사용하여 객체의 타입을 확인하고 클래스의 상속 관계를 이해할 수 있습니다.

profile
공부하는 개발자

0개의 댓글