
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에서 객체의 타입을 확인하는 데 사용됩니다. 객체가 특정 클래스의 인스턴스인지 여부를 확인할 때 사용할 수 있습니다.
위에서 제공한 코드 예시에서 BoyGroup과 GirlGroup은 모두 Idol 클래스를 상속받고 있습니다. 이 말은 BoyGroup과 GirlGroup의 모든 인스턴스는 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의 인스턴스이며, BoyGroup은 Idol을 상속받기 때문에 bts is Idol도 true를 반환합니다.bts는 BoyGroup의 인스턴스이므로 bts is BoyGroup는 true를 반환합니다.bts는 GirlGroup의 인스턴스가 아니기 때문에 bts is GirlGroup는 false를 반환합니다.동일한 방식으로 redVelvet 객체에 대해서도 확인할 수 있습니다. redVelvet는 GirlGroup의 인스턴스이고 GirlGroup은 Idol을 상속받기 때문에 redVelvet is Idol도 true를 반환합니다. 그러나 redVelvet는 BoyGroup의 인스턴스가 아니기 때문에 redVelvet is BoyGroup는 false를 반환합니다.
이러한 방식으로 is 키워드를 사용하여 객체의 타입을 확인하고 클래스의 상속 관계를 이해할 수 있습니다.