실습: 함수 오버라이드
부모의 virtual 함수를 자식이 재정의(override)하도록 만들어봅시다.
규칙 자체는 단순합니다. 부모 함수에 virtual 이 붙어 있어야 자식이 재정의할 수 있고, 자식은 그 함수에 override 키워드를 붙여야 합니다. 둘 중 하나라도 빠지면 컴파일되지 않습니다. 부모가 문을 열고(virtual), 자식이 그 문으로 들어가 새 구현을 넣는다(override)고 생각하면 쉽습니다.
시그니처는 그대로 유지
재정의하는 함수는 부모와 같은 이름, 같은 매개변수, 같은 반환 타입 을 유지해야 합니다. 시그니처가 조금이라도 다르면 재정의가 아니라 전혀 다른 함수로 취급됩니다. 재정의가 끝나면, 자식 인스턴스에서 그 함수를 호출했을 때 부모 버전이 아니라 자식 버전이 실행됩니다.
자식에서 재정의한 함수가 실행된다는 점이 다형성(polymorphism) 의 핵심입니다. 같은 함수
이름이지만 타입에 따라 다른 동작을 합니다.
해야 할 일:
- 아래
Animal컨트랙트에는virtual로 선언된sound함수가 있습니다. (수정하지 마세요.) Animal을 상속받는Dog컨트랙트를 작성하세요.Dog안에서sound함수를override로 재정의하고, 문자열"Woof"를 반환하도록 구현하세요.
재정의하는 함수는 부모와 같은 시그니처를 유지하고 override 키워드를 붙여야 합니다: function sound() public pure override returns (string memory).