일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 쿠버네티스
- CSS
- docker
- 백엔드
- BFS
- 솔리디티
- 가상화
- node.js
- 리액트
- 클라우드
- 프론트엔드
- 타입스크립트
- es6
- k8s
- 웹
- HTML
- kubernetes
- react
- 이더리움
- 파이썬
- 컴퓨터공학
- JavaScript
- 자바스크립트
- AWS
- 알고리즘
- next.js
- 백준
- TypeScript
- 이슈
- 블록체인
Archives
- Today
- Total
즐겁게, 코드
솔리디티 - 05. Storage와 Memory 본문
솔리디티에는 변수를 저장할 수 있는 Storage와 Memory 라는 공간이 존재합니다.
Storage는 블록체인 상에 영구적으로 저장되며, Memory는 임시적으로 저장되는 변수로 함수의 외부 호출이 일어날 때마다 초기화됩니다.
(비유하자면 Storage는 하드 디스크, Memory는 RAM에 저장되는 것을 의미합니다.)
대부분의 경우에는 솔리디티가 알아서 메모리 영역을 구분해 주는데요, 상태 변수(함수 외부에 선언된 변수)는 storage
로 선언되어 블록체인에 영구적으로 저장되는 반면, 함수 내에 선언된 변수는 memory
로 선언되어 함수 호출이 종료되면 사라지게 됩니다.
1. storage
storage
와 memory
키워드는 구조체와 배열을 선언할 때 명시적으로 선언되어야 합니다.
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";
}
반응형
'💬 언어 > Solidity' 카테고리의 다른 글
솔리디티 - 07. 컨트랙트의 소유권 (0) | 2021.04.19 |
---|---|
솔리디티 - 06. 상속과 인터페이스 (0) | 2021.04.16 |
솔리디티 - 04. 매핑과 msg.sender (0) | 2021.04.16 |
솔리디티 - 03. 이벤트 (0) | 2021.04.16 |
keccak256 함수로 난수 생성하기 (0) | 2021.04.16 |
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆