struct 배열
struct 도 일반 타입처럼 배열로 묶을 수 있습니다.
"여러 명의 사용자", "여러 개의 게시글"처럼 같은 모양의 데이터가 여러 개일 때 유용합니다.
등록부, 목록, 기록 저장소처럼 실전 컨트랙트 상당수가 struct 배열 을 뼈대로 삼습니다.
Person[] public people; // Person 동적 배열 (상태 변수)push 로 새 struct 를 배열 끝에 추가하고, 인덱스(people[0])로 각 요소에 접근합니다. 배열 길이는 people.length 로 얻습니다.
추가하고 읽기
상태 변수 배열에 새 요소를 더할 때는 보통 push 안에서 인스턴스를 만들어 넣습니다.
이미 들어 있는 요소를 수정하려면, people[i] 를 storage 참조로 받아 필드를 바꾸면 변경이 그대로 저장됩니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Registry {
struct Person {
string name;
uint256 age;
}
Person[] public people;
function addPerson(string memory _name, uint256 _age) public {
people.push(Person({ name: _name, age: _age }));
}
function birthday(uint256 _i) public {
Person storage p = people[_i]; // storage 참조로 요소 수정
p.age = p.age + 1;
}
function count() public view returns (uint256) {
return people.length;
}
}people[i] 를 memory 로 복사해 수정하면 배열 원본은 바뀌지 않습니다. 저장된 요소를 바꾸려면
반드시 Person storage p = people[i]; 처럼 storage 참조를 받으세요.
people 이 public 이므로 people(인덱스) 형태의 getter 가 자동 생성되어, 각 요소를 외부에서 조회할 수 있습니다.