함수 선언 문법
함수(function) 는 컨트랙트가 하는 동작의 기본 단위입니다. 값을 읽거나, 상태를 바꾸거나, 계산하는 모든 로직은 함수 안에 담깁니다.
컨트랙트가 "데이터를 담는 그릇"이라면, 함수는 그 데이터를 다루는 "버튼"에 해당합니다. 외부 사용자나 다른 컨트랙트는 이 함수를 호출해 컨트랙트와 상호작용합니다.
함수의 기본 골격
Solidity 함수는 정해진 순서로 구성 요소를 나열합니다. 핵심은 function 키워드, 이름, 매개변수, 가시성, 상태변경성, 그리고 필요할 때만 붙이는 returns 입니다.
function 함수이름(매개변수 목록) 가시성 [상태변경성] [returns (반환타입)] {
// 실행할 코드
}function: 함수를 선언하는 키워드입니다. (생성자는 예외적으로function없이constructor로 씁니다.)가시성(visibility):public,private,internal,external중 하나로 누가 호출할 수 있는지를 정합니다.- 상태변경성:
view,pure,payable등으로 함수가 상태를 어떻게 다루는지를 표시합니다. returns: 값을 돌려줄 때만 붙이며, 괄호 안에 반환 타입을 적습니다.
가장 단순한 함수
매개변수도 반환값도 없는 함수부터 시작해봅시다. 아래 doNothing 은 상태를 읽지도 쓰지도 않으므로 pure 로 표시했습니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Greeter {
// 가장 단순한 함수: 매개변수도 반환값도 없습니다.
function doNothing() public pure {
// 아무 일도 하지 않습니다.
}
// 매개변수를 받아 계산 결과를 반환하는 함수
function add(uint256 a, uint256 b) public pure returns (uint256) {
return a + b;
}
}함수에는 가시성을 반드시 명시해야 하며, 생략하면 컴파일 오류가 납니다. (상태 변수는 생략할 수
있고, 이때 기본값은 internal 입니다.)
관례로 굳어진 작성 순서
문법상 가시성과 상태변경성은 순서를 바꿔 써도 컴파일됩니다. 예를 들어 function f() view public 도 function f() public view 와 똑같이 동작합니다. 다만 returns 는 반드시 맨 뒤에 와야 합니다.
그럼에도 공식 스타일 가이드와 대부분의 실무 코드는 가시성 → 상태변경성 → returns 순서를 따릅니다. 컴파일러가 강제하는 규칙은 아니지만, 남들이 읽기 쉽도록 이 순서를 습관으로 들이세요.