블록체인 학습
0 XP

실습: 상속 종합

상속, virtual/override, super 를 한꺼번에 활용하는 컨트랙트를 만들어봅시다.

자식은 부모를 is 로 상속받고, 부모의 virtual 함수를 override 로 재정의하며, 그 안에서 super 로 부모의 원래 로직을 먼저 실행합니다. 이는 블록체인 프로그래밍 실무에서도 흔한 패턴입니다. 토큰 전송 함수를 재정의해 부모의 전송 로직을 super 로 그대로 수행한 뒤, 수수료나 보너스 같은 자식만의 동작을 덧붙이는 식입니다.

super 로 부모 로직을 재사용하기

핵심은 부모의 동작을 복사하지 않고 재사용 하는 것입니다. super.deposit(amount) 를 호출하면 부모 Account 의 입금 로직이 그대로 실행되어 balance 가 갱신됩니다. 그 뒤에 자식은 추가 로직(보너스 가산)만 작성하면 됩니다. 부모 코드를 통째로 베껴 쓰면 부모가 바뀔 때 자식도 따라 깨지지만, super 를 쓰면 부모의 변경이 자동으로 반영되어 유지보수가 훨씬 수월합니다.

super.함수(인자) 는 부모의 같은 이름 함수를 호출합니다. 인자가 있는 함수라면 인자도 그대로 전달해야 합니다.

해야 할 일:

  1. 아래 Account 컨트랙트에는 balance 상태 변수와 virtual 함수 deposit 이 있습니다. (수정하지 마세요.)
  2. Account 를 상속받는 BonusAccount 컨트랙트를 작성하세요.
  3. BonusAccount 에서 deposit 을 override 로 재정의하세요.
    • 먼저 super.deposit(amount) 로 부모의 입금 로직을 실행하고,
    • 그 다음 balance 에 보너스로 1 을 더하세요.
  4. BonusAccount 에 bonusRate 라는 public 상태 변수를 선언하고 초기값을 1 로 설정하세요.

부모의 로직을 버리지 말고 super 로 재사용한 뒤, 자식만의 동작을 더하는 패턴을 연습합니다.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.