:Smart Contract에서 영구적으로 저장되는 데이터를 의미.
이 데이터는 블록체인에 저장되며, 계약이 실행 될 때마다 변경 될 수 있다.
:Storage는 계약의 상태를 유지하고 계약의 실행 결과를 저장하는데 사용된다.
:Smart Contract에서 일시적으로 사용되는 데이터를 의미.
계약이 실행 될 때마다 생성되며, 계약 완료 후 소멸
Memory는 계약의 실행 중에만 사용되며, 계약의 상태를 변경하지 않는다.
:Smart Contract에 전달되는 데이터를 의미.
계약이 실행 될 때마다 생성, 계약 완료 후 소멸
계약의 실행 중에만 사용되며, 계약의 상태를 변경하지 않는다.
Calldata는 계약의 함수 호출 시 인자로 전달되는 데이터를 의미한다.
데이터 저장 방식은 Solidity에서 메모리 관리를 효율적으로 처리할 수 있도록 도와준다. 또한 Smart Contract의 실행 속도와 안정성을 향상시키는 데에 도움을 준다.
// // SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18;
contract Square {
//제곱
function square(uint _a) public pure returns(uint){
return _a**2;
}
//세제곱
function cubic(uint _a) public pure returns(uint){
return _a**3;
}
/// a의 b승
function power(uint _a, uint _b) public pure returns(uint){
return _a**_b;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18;
contract BYTES {
bytes a;
function setA(bytes memory _a) public {
a = _a;
}
function setA2() public {
a = "16";
}
function setA3(string memory _a) public {
a = bytes(_a);
}
function getA() public view returns(bytes memory) {
return a;
}
}
- setA함수
:bytes 타입의 인자를 받아서 변수 a흘 설정하는 함수, 함수 인자인 _a는 memory로 선언, 함수가 실행 되는 동안에만 메모리에 저장, 변수 a에 _a를 할당하여 a를 업데이트- setA2함수
:변수 a를 "16"설정하여 bytes타입으로 바로 할당, solidity compiler가 자동으로 메모리에 저장된다. -> memory 사용x- setA3함수
:string 타입의 인자를 받아서 bytes 타입으로 변환 후 a를 설정하는 함수, 인자인 _a는 memory로 선언되어 실행되는 동안에만 메모리에 저장된다. 함수 내부에서는 _a를 bytes타입으로 변환 후, 변수 a에 할당한다.- getA함수
:변수 a를 조회하여 반환, 반환값인 bytes타입은 memory로 선언되어 함수가 실행되는 동안에만 메모리에 저장