---
title: "Solidity call 함수란?"
description: "Solidity call 함수의 작동 방식 알아보기"
---

# Solidity call 함수란?

[Solidity](https://www.alchemy.com/overviews/solidity) 프로그래밍 언어는 주로 Ethereum 블록체인에서 스마트 컨트랙트를 만드는 데 사용됩니다. 이 글에서는 Solidity call 함수에 대해 알아야 할 모든 내용을 다룹니다.

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

Solidity의 `call`** 함수는 개발자가 다른 컨트랙트와 상호작용할 때 사용하는 저수준 함수입니다.**

[Solidity 스마트 컨트랙트](https://www.alchemy.com/overviews/solidity-smart-contract)를 빌드할 때, 자신의 컨트랙트에서 [다른 컨트랙트와 상호작용](https://www.alchemy.com/overviews/solidity-call-another-contract)하고자 할 때는 언제든 `call` 메서드를 사용해야 합니다.

call은 호출자가 제공한 Ether를 사용해 트랜잭션 비용을 지불하면서, 수신 측 스마트 컨트랙트의 다른 함수를 실행하는 데에도 사용할 수 있습니다. 또한 `call` 함수는 트랜잭션 상태를 boolean으로 반환하며, 반환값이 변수로 전달된다는 장점이 있습니다.

### **calldata란 무엇인가?**

`Calldata`는 함수의 인자에 지정된 데이터를 담는 임시 저장소의 한 형태입니다. 또 다른 임시 저장소 형태인 memory와의 차이점은, _calldata_는 불변이라는 점입니다—`calldata` 안에 저장된 내용은 변경할 수 없습니다.

## **Solidity call 함수는 어떻게 동작하는가?**

Solidity call 함수는 `calldata`를 받아—네이티브 ETH 전송의 경우 0이 될 수 있습니다—저수준 [EVM opcode CALL](https://ethereum.org/en/developers/docs/evm/opcodes/)을 기반으로 해당 `calldata`을 의도한 수신자에게 실행하는 방식으로 동작합니다.

data(즉, 수신 측 스마트 컨트랙트에서 호출할 함수)와 gas가 제공되면, `call` 메서드는 이 두 가지를 사용해 스마트 컨트랙트 내부의 함수를 실행할 수 있습니다.

### **call 메서드로 ether를 보내는 방법**

[Solidity 함수](https://www.alchemy.com/overviews/solidity-functions) 중 하나로, 원하는 [Solidity IDE](https://www.alchemy.com/overviews/solidity-ide)에 다음 코드를 사용하고 `address payable _to`을 수신자 주소로 교체하면 됩니다.

아래는 call로부터 Ether를 받을 수 있는 컨트랙트를 생성하는 코드입니다.

### call과 delegatecall의 차이는 무엇인가?

`call`와 `delegatecall`의 차이는, `delegatecall`은 호출된 함수의 코드가 마치 호출을 수행하는 스마트 컨트랙트의 일부인 것처럼 실행한다는 점입니다. 반면 `call` 메서드는 다른 스마트 컨트랙트의 일부로서 함수를 있는 그대로 호출합니다. 실무적으로 이는 호출된 함수가 호출자의 storage, `msg.sender`, `msg.value`를 사용한다는 것을 의미합니다.

### call과 transfer의 차이는 무엇인가?

Transfer는 gas 한도가 고정되어 있으며 실패 시 취소됩니다. Call은 일반적인 call 대신 `someAddress.call.value(ethAmount).gas(gasAmount)()`를 사용하여 gas 한도를 커스터마이징할 수 있으며, 트랜잭션이 실패하면 false를 반환합니다.

`transfer` 메서드는 더 이상 사용이 권장되지 않습니다. 하지만 과거에는 `transfer`이 gas에 내장된 한도를 사용하기 때문에 선호되었는데, 이는 [재진입 공격 방지](https://www.alchemy.com/overviews/reentrancy-attack-solidity)에 도움이 되었기 때문입니다. transfer 메서드의 고정된 gas 한도는 또한 2300 gas라는 상한선을 설정하고자 하는 연산에 더 나은 선택이 되게 했습니다.

## **Solidity call 메서드에 대해 더 알아보기**

[Solidity call에 대해 계속 알아보려면](https://www.alchemy.com/overviews/learn-solidity), Alchemy University의 무료 온라인 Solidity 개발자 크래시 코스에 자리를 확보하세요. 이 7주 과정의 [비동기식 Ethereum 부트캠프](https://university.alchemy.com/?a=5f566a8c97)는 Alchemy가 선도적인 Ethereum 교육 기업인 ChainShot을 인수한 후 새롭게 개편되었습니다.

개발이 처음인 개발자라면, Ethereum 부트캠프를 시작하기 전에 Alchemy University의 [**3주 JavaScript 크래시 코스**](https://www.alchemy.com/university/courses/js)를 선행 과정으로 수강하는 것이 좋습니다.
