관리 메뉴

즐겁게, 코드

솔리디티 - 05. Storage와 Memory 본문

💬 언어/Solidity

솔리디티 - 05. Storage와 Memory

Chamming2 2021. 4. 16. 16:48

솔리디티에는 변수를 저장할 수 있는 Storage와 Memory 라는 공간이 존재합니다.

Storage는 블록체인 상에 영구적으로 저장되며, Memory는 임시적으로 저장되는 변수로 함수의 외부 호출이 일어날 때마다 초기화됩니다.

(비유하자면 Storage는 하드 디스크, Memory는 RAM에 저장되는 것을 의미합니다.)

 

대부분의 경우에는 솔리디티가 알아서 메모리 영역을 구분해 주는데요, 상태 변수(함수 외부에 선언된 변수)는 storage로 선언되어 블록체인에 영구적으로 저장되는 반면, 함수 내에 선언된 변수는 memory로 선언되어 함수 호출이 종료되면 사라지게 됩니다.

1. storage

storagememory 키워드는 구조체와 배열을 선언할 때 명시적으로 선언되어야 합니다.

contract SandwichFactory {
  struct Sandwich {
    string name;
    string status;
  }

  Sandwich[] sandwiches;

  function eatSandwich(uint _index) public {
    // 솔리디티는 `storage`나 `memory`를 명시적으로 선언해야 한다는 경고를 출력합니다.
    Sandwich mySandwich = sandwiches[_index];

}

따라서, mySandwich 구조체에 storage 선언을 추가해 보겠습니다.

contract SandwichFactory {
  struct Sandwich {
    string name;
    string status;
  }

  Sandwich[] sandwiches;

  function eatSandwich(uint _index) public {
    Sandwich storage mySandwich = sandwiches[_index];

}

이제 sandwiches[_index] 는 전체 블록체인 상에 존재하게 됩니다.

2. memory

단순히 구조체의 값을 복사하거나 임시 변수로써 활용하고 싶다면 memory 키워드를 활용하면 됩니다.

contract SandwichFactory {
  struct Sandwich {
    string name;
    string status;
  }

  Sandwich[] sandwiches;

  function eatSandwich(uint _index) public {
    Sandwich memory mySandwich = sandwiches[_index];
    // 메모리 변수의 상태가 변해도 블록체인에는 영향을 미치지 않습니다.
    mySandwich.status = "eaten";
}

 

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆