Solidity 함수란?
작성자 Alchemy
Solidity 함수에는 view 함수, pure 함수, 특수 함수, fallback 함수 등 여러 종류가 있습니다. 함수는 또한 public, external, internal, private과 같은 함수 가시성 속성으로 수정할 수 있습니다. 이 글에서는 Solidity 함수 유형, 문법, 함수를 읽는 방법과 가시성에 대해 소개합니다.
Solidity 함수란 무엇인가?
Solidity 함수는 특정 작업을 수행하는 독립적인 코드 모듈입니다. 다른 web3 프로그래밍 언어와 마찬가지로, Solidity는 개발자가 함수를 사용해 동일한 코드를 반복해서 작성하는 중복을 없애고 모듈화된 코드를 작성할 수 있도록 합니다. 개발자는 필요할 때 프로그램 내에서 함수를 호출하면 됩니다.
Solidity 함수를 작성하고 읽는 방법
Solidity 함수를 작성하려면 개발자는 올바른 문법에 맞춰 함수를 구성하고, 함수가 제대로 실행될 수 있도록 기본 구성 요소를 빠짐없이 작성해야 합니다.
Solidity 함수 문법
아래 예시에서 볼 수 있듯이, 다음 문법에 따라 Solidity 함수를 작성합니다:
- function 키워드로 함수를 정의합니다
- 고유하며 예약 키워드와 겹치지 않는 함수 이름을 정합니다
- 매개변수의 이름과 데이터 타입을 나열하거나, 매개변수가 없으면 생략합니다
- 중괄호로 둘러싸인 문장 블록을 작성합니다
참고: Solidity 이벤트는 함수와 유사한 방식으로 선언됩니다. 이벤트와 함수는 모두 고급 dApp 작업에 필수적인 요소입니다.
아래 이미지는 Solidity 함수의 세 가지 주요 구성 요소를 보여줍니다:
- 함수 이름
- 함수 유형
- 반환 타입

Solidity 함수의 종류에는 어떤 것들이 있는가?
이 섹션에서는 view 함수, pure 함수, 특수 함수, fallback 함수를 포함하여 다양한 Solidity 함수 유형을 다룹니다.
1. View 함수
Solidity에서 view 함수는 읽기 전용이며, 스마트 컨트랙트에 정의된 상태 변수를 변경할 수 없습니다. view 함수의 문법은 다음과 같습니다:
2. Pure 함수
pure 함수는 상태 변수를 변경하거나 읽지 않는다는 것을 선언합니다. 일반적으로 pure 함수는 공통적인 유틸리티나 계산 작업을 수행합니다. pure 함수의 문법은 다음과 같습니다:
3. 특수 함수
Solidity에는 스마트 컨트랙트를 개발할 때 사용할 수 있는 몇 가지 특수 함수가 있습니다. getter 함수와 receive 함수는 Solidity 스마트 컨트랙트에서 중요한 payable 함수입니다.
Getter 함수
public으로 정의된 상태 변수는 컴파일러가 자동으로 생성하는 getter 함수를 가집니다. 이 함수는 변수와 동일한 이름을 가지며 external 가시성을 갖습니다.
Receive ether 함수
컨트랙트는 최대 하나의 receive 함수를 가질 수 있습니다. receive 함수는 인자를 가질 수 없고, 값을 반환할 수 없으며, external 가시성과 payable 상태 변경성을 가져야 합니다.
receive 함수는 Ether를 보내면서 어떤 함수도 지정하지 않은 컨트랙트 호출 시 실행됩니다. 이 함수는 다음과 같이 선언됩니다:
4. Fallback 함수
Solidity에서 fallback 함수는 이름, 인자, 반환값이 없는 external 함수입니다. fallback 함수는 함수 식별자가 스마트 컨트랙트 내의 사용 가능한 함수와 일치하지 않거나, 함수 호출과 함께 데이터가 제공되지 않았을 때 실행됩니다.
함수 오버로딩이란 무엇인가?
함수 오버로딩은 동일한 스코프 내에서 같은 함수 이름에 대해 여러 정의가 존재할 때 발생합니다. 함수 정의는 인자 목록의 타입 및/또는 개수에서 서로 달라야 합니다. 반환 타입만 다른 함수 선언은 오버로딩할 수 없습니다.
Vyper는 Solidity와 함수 오버로딩을 어떻게 다르게 처리하는가?
Solidity를 기반으로 한 파이썬 스타일 언어인 Vyper는 Solidity와 달리 함수 오버로딩을 허용하지 않습니다. Vyper에서 함수 오버로딩을 시도하면 "Duplicate function or event name" 오류가 발생합니다.
함수 가시성이란 무엇을 의미하는가?
함수 가시성을 지정하면 스마트 컨트랙트 내에서 어떤 주체가 함수를 호출할 수 있는지 제어할 수 있습니다. 호출자에는 세 가지 유형이 있습니다:
- 메인 컨트랙트
- 메인 컨트랙트로부터 파생(즉, 상속)된 컨트랙트
- 제3자
함수 가시성은 위 호출자 중 누가 해당 함수를 실행할 수 있는지 제어하는 데 도움이 됩니다. 함수 가시성에는 네 가지 유형이 있습니다:
- Public
- External
- Internal
- Private
함수의 접근성은 External에서 Private으로 갈수록 감소합니다. public 함수가 가장 접근성이 높고, private 함수가 가장 낮습니다.
External vs. Public
external과 public은 컨트랙트 외부에서 호출할 수 있는 두 가지 함수 가시성입니다. external은 다른 컨트랙트나 외부 소유 계정(EOA)에 의해서만 호출될 수 있음을 의미합니다. public은 외부에서 호출되거나 컨트랙트 내부에서도 호출될 수 있음을 의미합니다.
Internal vs. Private
external, public과 달리, internal과 private은 외부 당사자가 함수에 접근하는 것을 허용하지 않습니다. private 함수는 동일한 컨트랙트 내의 함수만 호출할 수 있습니다. internal 함수는 동일한 컨트랙트 내의 함수 또는 파생된 컨트랙트 내의 함수가 호출할 수 있습니다.
Solidity 함수에 대해 계속 학습하기
이 글에서는 Solidity의 함수에 대해 소개했습니다. 계속 학습하려면 Alchemy University's Ethereum Developer Bootcamp에 등록하여 7주 과정의 무료 비동기 Solidity 크래시 코스를 이용해보세요. 개발이 처음인 분들이라면, Ethereum 부트캠프를 시작하기 전 Alchemy University의 3주 JavaScript 크래시 코스를 먼저 수강하는 것을 권장합니다.
관련 개요

블록체인 매직을 만드세요
Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.


