Solidity(memory)
2024. 11. 25. 11:32ㆍBlockChain
반응형
Solidity에서 memory 키워드는 함수 내에서 사용되는 임시 데이터를 저장하기 위한 위치를 지정하는 데 사용됩니다.
메모리 키워드의 특징
- 임시 저장소
- memory에 저장된 데이터는 함수 호출 중에만 존재하고, 함수가 종료되면 사라집니다.
- 블록체인 영구 저장소인 storage와는 달리, 데이터를 영구적으로 저장하지 않습니다.
- 가스 비용
- memory는 storage보다 가스 비용이 저렴합니다.
- 단, 함수 실행 중 RAM에 데이터를 저장하므로, 저장 공간에 비례해 약간의 비용이 발생합니다.
- 주로 사용되는 경우
- 함수 내부에서만 사용하는 임시 데이터(예: 배열, 구조체, 문자열)를 처리할 때 사용됩니다.
- 데이터가 함수 외부로 전달되지 않거나 상태 변수에 저장되지 않을 때 적합합니다.
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 |