interface란?
인터페이스(interface) 는 컨트랙트가 "무엇을 할 수 있는지"만 정의한 약속(계약서) 입니다.
함수의 이름, 매개변수, 반환 타입, 가시성 같은 시그니처만 적고, 구현(내용)은 적지 않습니다.
현실에 비유하면 전기 콘센트의 규격과 같습니다. 콘센트는 "여기에 220V 플러그를 꽂으면 전기가 나온다"는 약속만 정의할 뿐, 그 전기가 어떤 발전소에서 어떻게 만들어지는지는 신경 쓰지 않습니다.
인터페이스도 마찬가지로 "어떻게 동작하는가"가 아니라 "어떤 함수가 존재하는가"만 약속하고,
실제 동작은 그 인터페이스를 따르는 다른 컨트랙트가 책임집니다.
상대의 코드를 몰라도 호출하는 법
내 컨트랙트가 다른 컨트랙트와 상호작용해야 할 때, 상대방의 전체 코드를 몰라도
인터페이스만 알면 그 함수를 호출할 수 있습니다. 블록체인 위에는 수많은 컨트랙트가 배포되어 있는데,
그 전부의 소스 코드를 내 코드 안에 복사해 둘 수는 없습니다. 대신 함수 시그니처만 담긴 interface
를 알고 있으면, 그 주소에 있는 컨트랙트의 함수를 안전하게 호출할 수 있습니다.
예를 들어 ERC-20 토큰의 transfer 함수는 모든 토큰이 동일한 시그니처를 따르므로,
인터페이스 하나로 어떤 토큰이든 다룰 수 있습니다. 이것이 인터페이스가 만들어내는 표준화의 힘입니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// 함수의 시그니처만 약속한다. 구현은 없다.
interface ICounter {
function increment() external;
function count() external view returns (uint256);
}이처럼 interface 안의 함수는 본문({ ... })이 없고 세미콜론으로 끝납니다.
인터페이스가 쓰이는 자리
대표적으로 ERC-20(토큰), ERC-721(NFT) 같은 표준이 모두 인터페이스로 정의되어 있습니다.
서로 다른 팀이 만든 컨트랙트라도 같은 인터페이스를 따르면, 지갑·거래소·다른 컨트랙트가
일관된 방식으로 소통할 수 있습니다. 인터페이스는 블록체인에서 다형성(polymorphism) 을 가능하게 하는 핵심 도구입니다.