실습: 이벤트와 struct 함께 사용하기
이번 실습에서는 struct 에 데이터를 저장하면서, 동시에 이벤트로 그 사실을 외부에 알립니다. "데이터는 상태 변수 에, 사건 알림은 이벤트에"라는 실무 패턴을 직접 구현해 봅니다.
사용자 정보를 User[] 배열에 push 하면 그 값은 스토리지에 영구 저장되어 컨트랙트가 다시 읽을 수 있습니다. 하지만 dApp 화면은 "방금 새 사용자가 추가됐다"는 사실을 즉시 알아야 UI를 갱신합니다. 그래서 상태 변수 갱신 직후 UserAdded 이벤트를 발행해 외부에 알립니다.
배열에 추가하는 작업(상태 변수 갱신)을 먼저 하고, 그 다음 emit 으로 사건을 기록하세요. 이렇게 하면 로그 가 남은 시점에는 데이터가 이미 확정되어 있습니다.
해야 할 일:
Registry컨트랙트 안에User라는struct를 선언하세요. 필드는string name과uint256 age입니다.users라는public동적 배열을 선언하세요. 타입은User[]입니다.UserAdded라는 이벤트를 선언하세요. 매개변수는string name과uint256 age입니다.addUser(string memory name, uint256 age)라는public함수를 만드세요. 새User를users에 추가한 뒤UserAdded이벤트를 발행하세요.
배열에 구조체를 추가할 때는 users.push(User(name, age)); 처럼 작성합니다. 추가 직후 emit UserAdded(name, age); 로 이벤트를 발행하세요.
여기서 name 은 indexed 가 아니므로 원본 문자열 그대로 데이터 영역에 담깁니다. 만약 string 을
indexed 로 했다면 값이 아니라 해시가 topic 으로 저장된다는 점을 기억해 두세요.
완성 후 Run 을 눌러 모든 조건을 통과하는지 확인하세요.