Solidity 문법 - (7) 저장방식
2023. 5. 29. 17:52ㆍBlockChain/Solidity 깨부수기 ( 유투브 강의 )
목차 |
1. 저장방식 |
2. 저장방식 예제코드 |
1. 저장방식
솔리디티의 저장방식에는 크게 4가지 방법이 있다.
storage
대부분의 변수와 함수가 저장되는 곳이며 영속적(영구적)으로 저장된다.
블록에 들어가서 저장되기 떄문에 가스 비용이 많이 들게된다.
memory
함수 내부에서 사용되는 변수, 파라미터, 리턴이나
레퍼런스 타입(string, Arrays, struct)을 사용할 경우에 저장되는 공간이다.
함수가 작동할 때만 유효한 값이고 영속적이지 않기 떄문에 storage를 사용할 때보다 가스가 적게든다.
※ string이 reference 타입인 이유
자바스크립트를 예로 들어보면 string에도 index가 존재하는 것을 알 수 있는데,
솔리디티는 이를 Arrays와 비슷하게 판단하여 reference에 string이 속한다.
calldata
external 함수의 파라미터를 저장할 때 사용한다.
stack
EVM에서 stack data를 관리할 때 쓰는 영역으로 1024mb로 제한하고 있다.
2. 저장방식 예제코드
매개변수로 레퍼런스 타입을 사용할 때에 memory 키워드를 붙여 주어야한다.
(변수로 string을 선언할 때에는 컨트랙트를 배포할 때 영속적으로 저장(storage)에 들어가기 떄문에 적어주지 않아도 된다.)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HowIsItSaved {
// function -string
// referenc에 들어간다, 배열과 연관되어 있기 때문에
// string을 사용하려면 memory라는 키워드를 적어주어야한다.
// storage에 저장되기 때문에 memory를 적어주지 않아도 된다.
string name = "Char1ey";
function savedStr(string memory _str) public pure returns(string memory){
return _str;
}
function savedUint(uint256 _uint) public pure returns(uint256){
return _uint;
}
}
아래처럼 선언된 함수와 변수들은 Storage에 저장된다.
Memory에는 함수 내부의 값, 파라미터, 리턴 등이 들어간다.
string타입은 가변길이 이므로 memory를 적어줘야하지만,
uint 256은 고정된 데이터 크기이므로 memory가 아닌 stack에서 관리하기 떄문에 적어주지 않아도 된다.
'BlockChain > Solidity 깨부수기 ( 유투브 강의 )' 카테고리의 다른 글
Solidity 문법 - (9) Contract 생성자 함수 (0) | 2023.05.29 |
---|---|
Solidity 문법 - (8) 인스턴스의 생성과 사용 (0) | 2023.05.29 |
Solidity 문법 - (6) view와 pure (0) | 2023.05.29 |
Solidity 문법 - (5) 접근 제한자 (0) | 2023.05.29 |
Solidity 문법 - (4) 함수의 정의 (0) | 2023.05.29 |