https://secureum.substack.com/p/solidity-101
26. Free Function
Solidity에서 Free Functions란, Contract 바깥에 정의된 함수를 의미하며, 암묵적으로 internal 가시성을 갖습니다.
특징
- 컨트랙트 외부에서 정의되며, 특정 컨트랙트에 종속되지 않음
- 암묵적으로 internal → 컨트랙트 바깥에 있어도 외부에서 직접 호출 불가능
- 호출하는 모든 컨트랙트에 함수 코드가 복사되어 포함됨 → 내부 라이브러리 함수와 유사한 동작
- 주로 유틸리티 함수나 공통 로직을 구현할 때 사용
- EVM 상에서 별도의 외부 호출이 아니라 inline 형태로 삽입됨 (가스 절약)
동작 방식
- add 함수는 컨트랙트 바깥에 정의되어 있지만, MyContract에서 호출하면 컴파일 시 해당 함수 코드가 MyContract 바이트코드에 포함됨
- EVM 실행 시 외부 CALL 없이 내부에서 실행되므로, 가스 소모가 줄어듦
- 하지만 외부 컨트랙트에서 add를 직접 호출할 수는 없음 (internal이기 때문)
코드 예시