솔리디티에서 참조형(Reference Types)은 메모리, 스토리지 또는 캘리데이터 영역에 저장되는 데이터를 참조하는 자료형입니다. 참조형은 크게 배열(Array), 매핑(Mapping), 구조체(Struct)로 나눌 수 있습니다. 이 글에서는 참조형의 특징 및 사용 방법에 대해 알아봅시다.
배열 (Array)
배열은 동일한 자료형의 원소들을 순차적으로 저장하는 자료구조입니다. 솔리디티에서는 고정 크기 배열과 가변 크기 배열을 사용할 수 있습니다. 다차원 배열도 사용할 수 있습니다.
uint[][] multiArray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
매핑 (Mapping)
매핑은 키-값 쌍을 저장하는 자료구조입니다. 솔리디티에서는 매핑을 사용하여 효율적으로 데이터를 저장하고 검색할 수 있습니다. 매핑의 키와 값에도 다양한 자료형을 사용할 수 있으며, 중첩된 매핑도 가능합니다.
mapping(uint => mapping(address => bool)) public userMapping;
구조체 (Struct)
구조체는 서로 다른 자료형의 값을 하나의 묶음으로 저장하는 사용자 정의 자료형입니다. 솔리디티에서 구조체를 사용하면 관련 데이터를 논리적으로 묶어서 처리할 수 있습니다. 구조체 내부에 다른 구조체나 참조형을 포함할 수도 있습니다.
struct Course {
string title;
uint creditHours;
bool isElective;
}
struct Student {
string name;
uint age;
bool isFullTime;
Course[] courses;
}
Student public student;
문자열 (String)
문자열은 문자의 배열로 볼 수 있습니다. 문자열은 동적 크기의 배열인 bytes와 동일한 방식으로 저장되며, 길이를 변경할 수 없습니다.
string public message = "Hello, World!";
참조형의 저장 위치
참조형에는 저장 위치를 명시할 수 있으며, 기본적으로는 메모리(Memory)와 스토리지(Storage) 두 가지 옵션이 있습니다. 메모리는 일시적인 저장 공간으로 함수 호출이 끝나면 사라지고, 스토리지는 영구적인 저장 공간으로 컨트랙트가 살아있는 동안 데이터가 유지됩니다. 이 외에도 콜데이터(CallData)라는 저장 위치가 있으며, 주로 외부 함수의 매개변수로 사용됩니다.
pragma solidity ^0.8.0;
contract ReferenceTypeExample {
uint[] storageArray; // 스토리지에 저장되는 배열
function exampleFunction() public {
uint[] memory memoryArray; // 메모리에 저장되는 배열
storageArray.push(10);
memoryArray = new uint[](5);
memoryArray[0] = 1;
}
}
참조형의 특성
참조형은 값형과 다르게 데이터의 복사본이 아닌 실제 데이터에 대한 참조를 다룹니다. 따라서 참조형 변수를 다른 변수에 할당하면, 두 변수는 같은 데이터를 가리키게 됩니다. 이 특성을 이해하고 활용하면 효율적인 데이터 처리가 가능합니다
pragma solidity ^0.8.0;
contract ArrayExample {
uint[] public numbers = [1, 2, 3];
function doubleArray() public {
uint[] memory tempArray = numbers;
for (uint i = 0; i < tempArray.length; i++) {
tempArray[i] *= 2;
}
}
}
'블록체인 (Block Chain) > 이더리움' 카테고리의 다른 글
[솔리디티 입문] 4. 상태 변수 (0) | 2023.06.16 |
---|---|
[솔리디티 입문] 3. 글로벌 네임스페이스 (0) | 2023.06.16 |
[솔리디티 입문] 1. 값형(value type) (0) | 2023.06.16 |
솔리디티 (Solidity) (0) | 2023.06.16 |
리믹스 (Remix) (0) | 2023.06.16 |