Solidity(memory)

2024. 11. 25. 11:32BlockChain

반응형

Solidity에서 memory 키워드는 함수 내에서 사용되는 임시 데이터를 저장하기 위한 위치를 지정하는 데 사용됩니다.

 

메모리 키워드의 특징

  1. 임시 저장소
    • memory에 저장된 데이터는 함수 호출 중에만 존재하고, 함수가 종료되면 사라집니다.
    • 블록체인 영구 저장소인 storage와는 달리, 데이터를 영구적으로 저장하지 않습니다.
  2. 가스 비용
    • memory는 storage보다 가스 비용이 저렴합니다.
    • 단, 함수 실행 중 RAM에 데이터를 저장하므로, 저장 공간에 비례해 약간의 비용이 발생합니다.
  3. 주로 사용되는 경우
    • 함수 내부에서만 사용하는 임시 데이터(예: 배열, 구조체, 문자열)를 처리할 때 사용됩니다.
    • 데이터가 함수 외부로 전달되지 않거나 상태 변수에 저장되지 않을 때 적합합니다.

memory의 사용 예시

1. 함수 매개변수나 반환값에서 사용

pragma solidity ^0.8.0;

contract Example {
    // 문자열을 처리하고 반환하는 함수
    function processString(string memory input) public pure returns (string memory) {
        return input;
    }
}
  • string memory input : 함수 호출 시 입력된 문자열을 memory에 저장.
  • 반환값 역시 memory로 지정되어 함수가 실행되는 동안만 임시로 존재합니다.

2. 배열 처리에서 사용

pragma solidity ^0.8.0;

contract Example {
    // 배열의 모든 값에 1을 더한 결과를 반환
    function incrementArray(uint256[] memory numbers) public pure returns (uint256[] memory) {
        for (uint256 i = 0; i < numbers.length; i++) {
            numbers[i] += 1;
        }
        return numbers;
    }
}
  • uint256[] memory numbers : numbers 배열은 memory에 저장되어 함수 실행 중에만 존재.
  • 상태 변수로 저장하지 않으므로, 가스 비용 절약.

memory와 storage의 차이

특징 memory storage
저장 위치 함수 실행 중 RAM(임시 저장소) 블록체인(영구 저장소)
지속성 함수 실행 종료 시 데이터 삭제 데이터가 영구적으로 저장
가스 비용 비교적 저렴 상대적으로 비싸다
주로 사용하는 경우 함수 내 임시 데이터 처리 상태 변수를 저장/수정할 때

 


memory를 꼭 지정해야 하는 경우

Solidity에서는 특정 타입(예: string, array, struct)을 함수 내에서 사용할 때, 데이터 저장 위치를 명시적으로 지정해야 합니다.

function example(string memory data) public pure {
    // `string` 타입은 저장소 위치를 지정하지 않으면 컴파일 오류 발생
}

 


요약

  • memory는 임시 데이터 저장소로, 함수 실행 중에만 데이터를 저장합니다.
  • 함수 호출이 끝나면 데이터는 삭제되며, 상태 변수나 영구 저장소에 영향을 미치지 않습니다.
  • 임시 데이터 처리함수 내 계산에 적합하며, 가스 비용을 절약할 수 있는 중요한 도구입니다.
반응형

'BlockChain' 카테고리의 다른 글

OpenZeppelin  (0) 2024.11.27
메이커다오(MakerDAO)와 다이(DAI)  (0) 2024.11.26
Solidity(view, pure)  (0) 2024.11.24
Web3 지갑의 개념과 분류  (0) 2024.11.23
자산 토큰화란  (4) 2024.11.22