본문 바로가기

Solidity

string과 저장영역

이번에는 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