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
키워드를 사용하여 객체의 타입을 확인하고 클래스의 상속 관계를 이해할 수 있습니다.