실습: 상속 종합
상속, virtual/override, super 를 한꺼번에 활용하는 컨트랙트를 만들어봅시다.
자식은 부모를 is 로 상속받고, 부모의 virtual 함수를 override 로 재정의하며, 그 안에서 super 로 부모의 원래 로직을 먼저 실행합니다. 이는 블록체인 프로그래밍 실무에서도 흔한 패턴입니다. 토큰 전송 함수를 재정의해 부모의 전송 로직을 super 로 그대로 수행한 뒤, 수수료나 보너스 같은 자식만의 동작을 덧붙이는 식입니다.
super 로 부모 로직을 재사용하기
핵심은 부모의 동작을 복사하지 않고 재사용 하는 것입니다. super.deposit(amount) 를 호출하면 부모 Account 의 입금 로직이 그대로 실행되어 balance 가 갱신됩니다. 그 뒤에 자식은 추가 로직(보너스 가산)만 작성하면 됩니다. 부모 코드를 통째로 베껴 쓰면 부모가 바뀔 때 자식도 따라 깨지지만, super 를 쓰면 부모의 변경이 자동으로 반영되어 유지보수가 훨씬 수월합니다.
super.함수(인자) 는 부모의 같은 이름 함수를 호출합니다. 인자가 있는 함수라면 인자도 그대로
전달해야 합니다.
해야 할 일:
- 아래
Account컨트랙트에는balance상태 변수와virtual함수deposit이 있습니다. (수정하지 마세요.) Account를 상속받는BonusAccount컨트랙트를 작성하세요.BonusAccount에서deposit을override로 재정의하세요.- 먼저
super.deposit(amount)로 부모의 입금 로직을 실행하고, - 그 다음
balance에 보너스로1을 더하세요.
- 먼저
BonusAccount에bonusRate라는public상태 변수를 선언하고 초기값을1로 설정하세요.
부모의 로직을 버리지 말고 super 로 재사용한 뒤, 자식만의 동작을 더하는 패턴을 연습합니다.