블록체인 학습
0 XP

상태 변수란?

상태 변수(state variable)는 컨트랙트 안, 함수 바깥에 선언하는 변수입니다. 그 값은 블록체인의 storage에 영구적으로 기록되어 컨트랙트가 살아 있는 한 계속 유지됩니다. 일반 프로그램의 변수는 실행이 끝나면 사라지지만, 상태 변수는 한 번 저장하면 다음 트랜잭션에서도, 며칠 뒤에도 그대로 남아 있습니다. 스마트 컨트랙트가 토큰 잔액이나 소유자 정보를 안전하게 보관할 수 있는 것도 이 덕분입니다.

상태 변수는 컨트랙트의 "기억"입니다. 한 번 저장한 값은 다음에 함수를 호출해도 그대로 남아 있습니다.

선언 위치가 핵심

같은 변수라도 어디에 선언했는지에 따라 성격이 완전히 달라집니다. 함수 안에서 선언한 변수는 함수가 끝나면 사라지지만, 컨트랙트 본문에 선언한 상태 변수는 storage에 기록되어 계속 유지됩니다. 그러니 여러 트랜잭션에 걸쳐 기억해야 하는 값은 반드시 함수 바깥, 컨트랙트 본문에 선언해야 합니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract Counter {
    // 아래 count 는 상태 변수입니다. 스토리지에 영구 저장됩니다.
    uint256 public count = 0;
 
    function increment() public {
        count = count + 1; // 호출할 때마다 값이 누적됩니다.
    }
}

스토리지는 비싸다

상태 변수는 강력하지만 공짜가 아닙니다. storage에 값을 쓰는 작업은 블록체인 전체에 기록을 남기므로 가스(gas) 비용이 매우 큽니다. 그래서 정말 영구히 보관해야 하는 데이터만 상태 변수로 두고, 계산용 임시 값은 함수 안의 지역 변수로 처리하는 것이 좋은 설계입니다.

스토리지에 값을 쓰는 작업은 가스(gas) 비용이 큽니다. 꼭 필요한 데이터만 상태 변수로 저장하세요.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.