---
title: "Solidity 함수란?"
description: "Solidity 함수 유형: View, Pure, Special, Fallback, 함수 가시성"
---

# Solidity 함수란?

[Solidity](https://www.alchemy.com/overviews/solidity) 함수에는 view 함수, pure 함수, 특수 함수, fallback 함수 등 여러 종류가 있습니다. 함수는 또한 public, external, internal, private과 같은 함수 가시성 속성으로 수정할 수 있습니다. 이 글에서는 Solidity 함수 유형, 문법, 함수를 읽는 방법과 가시성에 대해 소개합니다.

## **Solidity 함수란 무엇인가?**

**Solidity 함수는 특정 작업을 수행하는 독립적인 코드 모듈입니다.** 다른 [web3 프로그래밍 언어](https://www.alchemy.com/overviews/web3-programming-languages)와 마찬가지로, Solidity는 개발자가 함수를 사용해 동일한 코드를 반복해서 작성하는 중복을 없애고 모듈화된 코드를 작성할 수 있도록 합니다. 개발자는 필요할 때 프로그램 내에서 함수를 호출하면 됩니다.

## **Solidity 함수를 작성하고 읽는 방법**

Solidity 함수를 작성하려면 개발자는 올바른 문법에 맞춰 함수를 구성하고, 함수가 제대로 실행될 수 있도록 기본 구성 요소를 빠짐없이 작성해야 합니다.

### **Solidity 함수 문법**

아래 예시에서 볼 수 있듯이, 다음 문법에 따라 Solidity 함수를 작성합니다:

1. function 키워드로 함수를 정의합니다
1. 고유하며 예약 키워드와 겹치지 않는 함수 이름을 정합니다
1. 매개변수의 이름과 데이터 타입을 나열하거나, 매개변수가 없으면 생략합니다
1. 중괄호로 둘러싸인 문장 블록을 작성합니다

참고: [Solidity 이벤트](https://www.alchemy.com/overviews/solidity-events)는 함수와 유사한 방식으로 선언됩니다. 이벤트와 함수는 모두 고급 dApp 작업에 필수적인 요소입니다.

아래 이미지는 Solidity 함수의 세 가지 주요 구성 요소를 보여줍니다:

1. 함수 이름
1. 함수 유형
1. 반환 타입

<ImageBlock
  src="https://media.alchemy.com/1703927821-example-of-a-function-in-solidity.png"
  alt="Solidity 함수 예시"
  width={960}
  height={540}
  caption="Solidity 함수 예시"
/>

## **Solidity 함수의 종류에는 어떤 것들이 있는가?**

**이 섹션에서는 view 함수, pure 함수, 특수 함수, fallback 함수를 포함하여 다양한 Solidity 함수 유형을 다룹니다.**

### **1. View 함수**

Solidity에서 view 함수는 읽기 전용이며, 스마트 컨트랙트에 정의된 상태 변수를 변경할 수 없습니다. view 함수의 문법은 다음과 같습니다:

### **2. Pure 함수**

pure 함수는 상태 변수를 변경하거나 읽지 않는다는 것을 선언합니다. 일반적으로 pure 함수는 공통적인 유틸리티나 계산 작업을 수행합니다. pure 함수의 문법은 다음과 같습니다:

### **3. 특수 함수**

Solidity에는 스마트 컨트랙트를 개발할 때 사용할 수 있는 몇 가지 특수 함수가 있습니다. getter 함수와 receive 함수는 Solidity 스마트 컨트랙트에서 중요한 [payable 함수](https://www.alchemy.com/docs/solidity-payable-functions)입니다.

#### **Getter 함수**

public으로 정의된 상태 변수는 컴파일러가 자동으로 생성하는 getter 함수를 가집니다. 이 함수는 변수와 동일한 이름을 가지며 external 가시성을 갖습니다.

#### **Receive ether 함수**

컨트랙트는 최대 하나의 receive 함수를 가질 수 있습니다. receive 함수는 인자를 가질 수 없고, 값을 반환할 수 없으며, external 가시성과 payable 상태 변경성을 가져야 합니다.

receive 함수는 Ether를 보내면서 어떤 함수도 지정하지 않은 컨트랙트 호출 시 실행됩니다. 이 함수는 다음과 같이 선언됩니다:

### **4. Fallback 함수**

Solidity에서 fallback 함수는 이름, 인자, 반환값이 없는 external 함수입니다. fallback 함수는 함수 식별자가 스마트 컨트랙트 내의 사용 가능한 함수와 일치하지 않거나, 함수 호출과 함께 데이터가 제공되지 않았을 때 실행됩니다.

### **함수 오버로딩이란 무엇인가?**

함수 오버로딩은 동일한 스코프 내에서 같은 함수 이름에 대해 여러 정의가 존재할 때 발생합니다. 함수 정의는 인자 목록의 타입 및/또는 개수에서 서로 달라야 합니다. 반환 타입만 다른 함수 선언은 오버로딩할 수 없습니다.

#### **Vyper는 Solidity와 함수 오버로딩을 어떻게 다르게 처리하는가?**

[Solidity를 기반으로 한 파이썬 스타일 언어](https://www.alchemy.com/overviews/solidity-vs-vyper)인 Vyper는 Solidity와 달리 함수 오버로딩을 허용하지 않습니다. Vyper에서 함수 오버로딩을 시도하면 "Duplicate function or event name" 오류가 발생합니다.

## **함수 가시성이란 무엇을 의미하는가?**

함수 가시성을 지정하면 스마트 컨트랙트 내에서 [**어떤 주체가 함수를 호출할 수 있는지 제어**](https://www.alchemy.com/university/courses/ethereum?a=703dc50260)할 수 있습니다. 호출자에는 세 가지 유형이 있습니다:

1. 메인 컨트랙트
1. 메인 컨트랙트로부터 파생(즉, 상속)된 컨트랙트
1. 제3자

함수 가시성은 위 호출자 중 누가 해당 함수를 실행할 수 있는지 제어하는 데 도움이 됩니다. 함수 가시성에는 네 가지 유형이 있습니다:

1. Public
1. External
1. Internal
1. 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**](https://www.alchemy.com/university/courses/ethereum?a=703dc50260)에 등록하여 7주 과정의 무료 비동기 Solidity 크래시 코스를 이용해보세요. 개발이 처음인 분들이라면, Ethereum 부트캠프를 시작하기 전 Alchemy University의 [**3주 JavaScript 크래시 코스**](https://www.alchemy.com/university/courses/js)를 먼저 수강하는 것을 권장합니다.
