bool
, int
, uint
, address
, 고정 바이트 배열
데이터를 저장하는 영역에 연속적으로 저장되어 있는 값의 첫 번째 메모리 주소를 값으로 가지는 변수 타입
배열(정적 배열 uint[3]
, 동적 배열 uint[]
), string
, struct
, mapping
✔️ 솔리디티에서는 변수의 데이터 타입에 따라 저장되는 위치가 정해져 있다. 이 위치에 대한 지정을 제대로 해주지 않으면 컴파일 에러가 발생한다. 또한 솔리디티에는
undefined
와null
의 개념이 없다.
컨트랙트 최상단에 선언되는 변수로 컨트랙트 스토리지(블록체인)에 영구적으로 저장된다.
pragma solidity ^0.5.0;
contract SolidityTest {
uint storedData; // State variable
constructor() public {
storedData = 10; // Using State variable
}
}
함수가 실행되는 동안 값이 존재한다.
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
}
}
block
, msg
, tx
솔리디티에 내장되어 있는 변수로, 블록체인에 대한 정보를 얻는 데 사용된다.
상태 변수, 함수 내 로컬 변수
(상태 변수는 무조건 storage에 저장되고, 로컬 변수의 기본 저장 위치는 storage이며 memory
키워드를 이용해 저장 위치를 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/