[Solidity] 데이터 타입, 저장 위치
1. 데이터 타입
1-1. 값형 데이터 타입
bool
, int
, uint
, address
, 고정 바이트 배열
1-2. 참조형 데이터 타입
데이터를 저장하는 영역에 연속적으로 저장되어 있는 값의 첫 번째 메모리 주소를 값으로 가지는 변수 타입
배열(정적 배열 uint[3]
, 동적 배열 uint[]
), string
, struct
, mapping
✔️ 솔리디티에서는 변수의 데이터 타입에 따라 저장되는 위치가 정해져 있다. 이 위치에 대한 지정을 제대로 해주지 않으면 컴파일 에러가 발생한다. 또한 솔리디티에는
undefined
와null
의 개념이 없다.
2. 변수의 유형
2-1. 상태 변수 (State Variables)
컨트랙트 최상단에 선언되는 변수로 컨트랙트 스토리지(블록체인)에 영구적으로 저장된다.
pragma solidity ^0.5.0;
contract SolidityTest {
uint storedData; // State variable
constructor() public {
storedData = 10; // Using State variable
}
}
2-2. 지역 변수 (Local Variables)
함수가 실행되는 동안 값이 존재한다.
pragma solidity ^0.5.0;
contract SolidityTest {
uint storedData; // State variable
constructor() public {
storedData = 10;
}
function getResult() public view returns(uint){
uint a = 1; // local variable
uint b = 2;
uint result = a + b;
return result; //access the local variable
}
}
2-3. 전역 변수 (Global Variables)
block
, msg
, tx
솔리디티에 내장되어 있는 변수로, 블록체인에 대한 정보를 얻는 데 사용된다.
3. 변수별 기본 저장 위치
3-1. storage
상태 변수, 함수 내 로컬 변수
(상태 변수는 무조건 storage에 저장되고, 로컬 변수의 기본 저장 위치는 storage이며 memory
키워드를 이용해 저장 위치를 memory로 변경할 수 있다.)
3-2. memory
함수의 매개 변수, 함수의 리턴값
❗️주의할 점
참조형 데이터를 함수 내 로컬 변수로 쓰려면 memory
키워드가 필요하다.
참조형 데이터 타입의 경우, 기본적으로 memory에 저장된다. 하지만 로컬 변수는 기본적으로 storage에 저장되므로 아래의 경우 에러를 발생시킨다. storage에 저장되어야 하는 로컬 변수에 memory 타입의 값을 할당하려 하기 때문이다.
contract sample {
function sample(string _string) {
string myString1 = "Hello"; // Error
string memory myString2 = "Hello";
string myString3 = _string; // Error
📌 Reference
https://smilejsu.tistory.com/2491
https://steemit.com/kr/@etainclub/solidity-3
https://nanahkim.tistory.com/16
https://www.tutorialspoint.com/solidity/solidity_variables.htm
https://d2fault.github.io/2018/03/19/20180319-about-solidity-1/
Author And Source
이 문제에 관하여([Solidity] 데이터 타입, 저장 위치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yooni/Solidity-데이터-타입-저장-위치저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)