블록체인 학습
0 XP
Code Editor
에디터를 불러오는 중...
실행 결과

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

종합 실습: interface + library

지금까지 배운 인터페이스와 라이브러리를 함께 사용해봅니다. 실무 컨트랙트는 보통 이 둘을 조합합니다. 계산 로직은 library 로 분리해 재사용성과 가독성을 높이고, 외부와의 약속은 interface 로 명시해 다른 컨트랙트가 안전하게 호출할 수 있게 만듭니다.

이번 실습에서 각 요소가 맡는 역할은 다음과 같습니다.

  • Math 라이브러리: 순수 계산(add)을 담당. internal pure 로 인라인 임베드됩니다.
  • ICalculator 인터페이스: total() 과 addToTotal() 이라는 외부 약속을 정의.
  • Calculator 컨트랙트: 인터페이스를 is 로 상속해 약속을 구현하고, 내부에서 Math.add 를 활용.

흐름 정리

addToTotal(amount) 가 호출되면, Math.add(total, amount) 로 새 합계를 계산한 뒤 그 결과를 상태 변수 total 에 다시 저장합니다. total 은 public 이므로 인터페이스의 total() getter 약속을 자동으로 충족합니다.

해야 할 일:

  1. Math 라이브러리에 add(uint256 a, uint256 b) 함수를 만드세요. (internal pure, 합 반환)
  2. ICalculator 인터페이스에는 total() 과 addToTotal(uint256 amount) 가 약속되어 있습니다.
  3. Calculator 컨트랙트가 ICalculator 를 상속(is) 하도록 만드세요.
  4. total 이라는 public uint256 상태 변수를 선언하세요.
  5. addToTotal 을 구현하되, Math.add 를 사용해 total 에 amount 를 더하세요. (external override)

라이브러리로 계산 로직을 분리하고, 인터페이스로 외부 약속을 지키는 구조입니다. 실무 컨트랙트에서 자주 보이는 조합입니다.