실습: 투표 함수 구현
후보자를 등록할 수 있게 되었으니 이제 투표 기능을 추가합니다. 투표란 결국 "어떤 후보자에게 표 하나를 더해 준다" 는 동작입니다. 사용자는 후보자의 번호(인덱스)를 지정하고, 컨트랙트는 그 후보자의 득표 수를 1 늘립니다.
배열 요소의 구조체 필드에 접근하기
candidates 는 Candidate 구조체의 배열이므로, candidates[index] 는 하나의 후보자를 가리킵니다.
그 후보자의 득표 수는 점(.) 연산자로 candidates[index].voteCount 처럼 접근합니다.
여기에 += 1 을 적용하면 해당 후보자에게 표 하나가 추가됩니다. 상태 변수를 직접 수정하므로
이 함수는 view 나 pure 가 아닌 일반(상태 변경) 함수이고, 이렇게 바뀐 값은 블록체인에
영구히 저장됩니다.
function vote(uint256 index) public {
candidates[index].voteCount += 1;
}해야 할 일:
- 앞 강의의
Candidate구조체와candidates배열,addCandidate함수를 그대로 유지하세요. vote(uint256 index)함수를 추가하세요.- 함수 안에서
candidates[index].voteCount를1만큼 증가시키세요.
지금 단계에서는 같은 주소가 vote 를 여러 번 호출해 표를 무한히 쌓을 수 있습니다. 이 허점은
의도된 것으로, 바로 다음 강의에서 mapping 과 modifier 로 막습니다.
완성 후 Run 으로 조건을 확인하세요.