이번에는 string과 저장 영역에 대해서 알아봅시다.
모든 프로그래밍 언어에서 string은 문자열이라는 뜻입니다.
솔리디티도 마찬가지입니다
하지만 솔리디티에서 string을 사용할때는 memory라는 저장영역을 붙여줘야합니다.
솔리디티에서 저장영역은 크게 4가지가 있습니다.
1. stroage
단어 그 자체인 "저장" 하다 라는 뜻입니다.
storage는 함수 밖에있는 변수나 혹은 함수 그 자체를 저장합니다.
코드를 통해서 봅시다.
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
contract lecture {
uint256 public a = 10;
function a1() view public returns(uint256) {
return a;
}
}
위 코드를 보면 a라는 변수와 a1() 함수가 있죠?
얘네들은 전부 Stroage 저장 영역에 저장됩니다.
즉 storage는 함수 밖에있는 변수나 혹은 함수 그 자체를 저장합니다.
storage는 영속적으로 저장이되어 가스 비용이 비쌉니다.
이게 무슨 말일까요?
storage에 저장되는 값들은 블록체인에 올라갑니다.
그렇기때문에 모든 노드들이 우리의 변수,함수들을 볼 수 있고 블록체인에 올라갔다 라는것은
변하지않기때문에 가스비용이 비쌉니다.
2. memory
memory는 함수의 파라미터 값 , 리턴값이 저장됩니다.
코드를 통해서 봅시다.
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
contract lecture {
function a1(string memory _name) pure public returns(string memory) {
return _name;
}
}
memory라는 키워드가 보이시죠?
그렇다는건 함수의 파라미터 값 _name이 memory 공간에 저장되었다 라는걸 의미합니다.
string타입을 쓸때는 항상 memory라는 키워드를 붙여줘야합니다.
memory는 stroage와 달리 영속적이지않고 함수 내에서만 유효합니다.
그렇기때문에 가스비용이 storage에 비해 훨씬 저렴합니다.
그 밖에 calldata , stact 이라는 저장영역이 있는데
이 둘은 다음에 더 자세히 포스팅 하도록 하겠습니다
오늘도 어제보다 더 나은 하루가 되셨으면 좋겠습니다
감사합니다.
'Solidity' 카테고리의 다른 글
상속 / override (2) | 2023.10.20 |
---|---|
Instance란? (1) | 2023.10.20 |
View / Pure (1) | 2023.10.20 |
접근제한자란? (1) | 2023.10.19 |
Function 이란? (3) | 2023.10.19 |