이더리움/솔리디티

[솔리디티] 15. 인터페이스

라이튼 2023. 8. 9. 23:55

이전글

 

[솔리디티] 14. 상속, 오버라이딩, 다중 상속

이전글 [솔리디티] 13. receive, fallback, delegatecall 이전글 [솔리디티] 12. Payable, Transfer, Send, Call 이전글 [솔리디티] 11. 에러 처리 이전글 [솔리디티] 10. 이벤트 이전글 [솔리디티] 9. 조건문, 반복문 이

kwjdnjs.tistory.com

 

인터페이스

 이번 글에서는 솔리디티의 인터페이스에 대해 알아보겠습니다.

 

 인터페이스는 컨트랙트에 포함될 함수의 틀을 미리 정의하고, 다른 컨트랙트와 쉽게 상호작용 하기 위해 선언합니다. 인터페이스는 생성자와 상태 변수를 가질 수 없고, external 키워드를 가진 함수만 선언할 수 있습니다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

interface IContract1 {
    function add(uint a, uint b) external pure returns (uint);
}

contract Contract1 is IContract1 {
    function add(uint a, uint b) external pure returns (uint) {
        return a + b;
    }
}

 

 위 코드에서 IContract1 인터페이스는 Contract1에 해당하는 인터페이스입니다. Contract1의 함수 정보를 간략하게 담고 있습니다. IContract1을 Contract1에서 is로 상속하게 되면, 인터페이스가 Contract1에 적용됩니다. 인터페이스가 적용되면 Contract1은 IContract1에 정의된 함수를 컨트랙트 내부에서 반드시 정의해야 합니다.

 

 인터페이스를 이용하면 외부에서 함수를 쉽게 호출할 수 있습니다. 다음과 같이 Contract2에서 인터페이스 이름과 호출할 컨트랙트의 주소, 함수의 이름을 입력하면 쉽게 add함수를 호출할 수 있습니다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

interface IContract1 {
    function add(uint a, uint b) external pure returns (uint);
}

contract Contract1 is IContract1 {
    function add(uint a, uint b) external pure returns (uint) {
        return a + b;
    }
}

contract Contract2 {
    uint public i = 1;
    uint public j = 2;

    function update(address addr) public {
        i = IContract1(addr).add(i, j);
    }
}

 

 Contract1과 Contract2를 배포한 후 update 함수에 Contract1의 주소를 입력하면 함수가 정상적으로 실행됨을 확인할 수 있습니다.

 

 지금까지 솔리디티의 인터페이스에 대해 알아봤습니다. 감사합니다.

 

 

다음글

 

[솔리디티] 16. import, 라이브러리

이전글 [솔리디티] 15. 인터페이스 이전글 [솔리디티] 14. 상속, 오버라이딩, 다중 상속 이전글 [솔리디티] 13. receive, fallback, delegatecall 이전글 [솔리디티] 12. Payable, Transfer, Send, Call 이전글 [솔리디티

kwjdnjs.tistory.com