function 에 string 파라미터를 넣고, 그 받은 파라미터를 다시 리턴 해볼게요.
사실 string 을 function 내에서 쓰려면, memory 라는 키워드가 필요하답니다.
solidity 는 storage, memory, calldata ,stack 이렇게 4개의 저장 영역으로 나뉘어 있어요.
storage : 대부분의 변수, 함수들이 저장되며, 영속적으로 저장이되어 가스 비용이 비싸답니다.
memory: 함수의 파라미터, 리턴값, 레퍼런스 타입이 주로 저장이 됩니다.
그러나, storage 처럼 영속적이지 않고, 함수내에서만 유효하기에 storage보다 가스 비용이 싸답니다.
Colldata : 주로 external function 의 파라메터에서 사용 됩니다. 예를 들어 함수를 실행할 때 파라메터의 값 자체를 calldata로 받을 수 있습니다. calldata로 받게 된다면, 값은 변경할 수 없고 읽기만 가능합니다.
stack: EVM (Ethereum Virtual Machine) 에서 stack data를 관리할때 쓰는 영역인데 1024Mb 1024개의 data를 제한적으로 저장해 사용할 수 있습니다. 예를 들어, 함수를 실행할 때 로컬 변수와 같은것들을 잠시 기억할 때 EVM이 사용을 합니다.
저희는 string을 쓰기위해서는 memory 일식적으로 저장하는 키워드를 써야한답니다.
string은 사실 레퍼런스 타입이라고 볼 수 있어요. 그렇기 때문에, memory키워드를 넣어줘야합니다.
// SPDX-License-Identifier GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec7 {
function get_string(string memory _str) public pure returns( string memory){
return _str;
}
}
위에 간단한 예제가 있습니다.
string을 받아서 그대로 리턴하죠.
string 다음에 memory 키워드가 있어요, memory는 늘 string 다음에 붙여준답니다.
그리고, pure를 쓰는이유는, 파라미터 받은걸 바로 리턴하기해서, storage 에 저장된 변수들을 읽지 않았기때문 pure을 썻습니다.