struct 인스턴스 생성
선언한 struct 로 실제 데이터를 만드는 것을 인스턴스 생성(instantiation) 이라고 합니다.
struct 가 설계도라면, 인스턴스 는 그 설계도로 찍어 낸 실제 객체입니다. 인스턴스를 만드는 방식은 크게 두 가지입니다.
위치 기반 생성
선언한 필드 순서대로 값을 넣습니다. 짧지만 필드 순서를 외워야 하고, 순서가 어긋나면 잘못된 값이 조용히 들어갑니다.
Person memory p = Person("Alice", 30, msg.sender);이름 기반 생성
필드 이름을 명시해 값을 넣습니다. 순서가 바뀌어도 안전하고 가독성이 좋아 실무에서 권장됩니다.
Person memory p = Person({ name: "Alice", age: 30, wallet: msg.sender });필드가 많거나 같은 타입(uint256이 여러 개 등)이 섞여 있을 때는 이름 기반 방식이 실수를 크게 줄여 줍니다.
데이터 위치와 필드 접근
함수 안에서 만드는 임시 인스턴스는 보통 memory 에 둡니다.
생성한 인스턴스의 필드는 점(.) 으로 읽고 쓸 수 있습니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Example {
struct Person {
string name;
uint256 age;
}
function makePerson() public pure returns (uint256) {
Person memory p = Person({ name: "Alice", age: 30 });
p.age = p.age + 1; // 필드 쓰기
return p.age; // 필드 읽기: 31
}
}이름 기반으로 만들 때는 모든 필드를 빠짐없이 지정해야 합니다. 일부 필드를 생략하면 컴파일 오류가 납니다.