[Solidity] 데이터 타입, 저장 위치


1. 데이터 타입


1-1. 값형 데이터 타입

bool, int, uint, address, 고정 바이트 배열


1-2. 참조형 데이터 타입

데이터를 저장하는 영역에 연속적으로 저장되어 있는 값의 첫 번째 메모리 주소를 값으로 가지는 변수 타입
배열(정적 배열 uint[3], 동적 배열 uint[]), string, struct, mapping


✔️ 솔리디티에서는 변수의 데이터 타입에 따라 저장되는 위치가 정해져 있다. 이 위치에 대한 지정을 제대로 해주지 않으면 컴파일 에러가 발생한다. 또한 솔리디티에는 undefinednull의 개념이 없다.



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/

좋은 웹페이지 즐겨찾기