솔리디티에서는 변수가 저장되는 데이터 영역으로 크게 3가지가 있다. 각각의 데이터 영역은 사용되는 목적과 특성에 따라 다르게 사용되는데, 이 데이터 영역들의 특징을 알아보자. 설명 내용이 길면 맨 아래 요약된 글을 참고하자. Storage 솔리디티에서 storage는 블록체인에 영구적인 상태를 저장하는 영역이다. 모든 스마트 컨트랙트의 상태는 블록체인의 상태로 저장되며, 상태 변경 함수가 호출될 때마다 해당 상태의 변경 사항이 블록체인의 storage에 저장된다. contract Example { uint256 public myNumber; } 위 코드에서 myNumber는 uint256 타입의 상태 변수이다. 이 변수는 스마트 컨트랙트의 storage 영역에 저장된다. myNumber 변수는 Examp..
솔리디티에서 함수를 정의할 때 함수 옆에 붙어서 제약을 걸어주는 키워드들이 존재한다. 이 키워드를 사용하면 그 함수에 부가적인 기능을 추가할 수 있는데 키워드들을 잘 사용하면 컨트랙트의 가스 비용을 줄이거나 간편하게 제약을 걸 수 있다. view 솔리디티에서 view가 붙은 함수는 블록체인에서 상태를 변경하지 않고 값을 읽기만 하는 함수이다. view 함수는 단순히 데이터를 읽기만 하고 변경하지 않기 때문에, 다른 컨트랙트를 호출할 수 있지만 상태를 변경하는 함수는 호출할 수 없다. 따라서 view 함수는 블록체인 안에서 상태 변경이 발생하지 않으며, 실행될 때 가스비의 없이 무료로 실행된다. 다음은 view 함수의 예시이다. pragma solidity ^0.8.0; contract Example { ..
솔리디티에서 override 키워드는 솔리디티 0.6.0 버전 이후에 추가된 기능으로, 상위 컨트랙트(contract)에서 정의된 함수를 하위 컨트랙트(contract)에서 재정의(override)할 때 사용한다. 상위 컨트랙트에서 정의된 함수와 같은 이름과 형식을 갖는 함수를 하위 컨트랙트에서 정의하면, 이를 override 했다고 한다. 이때, override한 함수는 상위 컨트랙트에서 정의된 함수와 이름, 매개변수 형식, 반환값 형식이 동일해야 한다. 즉, 상속받은 함수를 덮어쓰기 위해 같은 이름, 같은 매개변수를 가진 함수를 다시 정의할 때 사용하는 것이다. 솔리디티는 override를 통해 컨트랙트 간의 상속 관계를 구현할 수 있다. override(오버라이드, 재정의) override된 함수는..
솔리디티에서 msg.sender는 가장 중요한 전역 변수(global variable) 중 하나 이다. msg.sender는 현재 스마트 계약을 호출한 계정의 주소를 나타내며, 이것을 통해 스마트 계약은 누가 트랜잭션을 실행했는지 확인할 수 있다. 예를 들어, 계약을 배포한 주소에서 트랜잭션을 호출하면 msg.sender는 배포한 계정의 주소가 된다. 또, 다른 계정에서 트랜잭션을 호출하면 msg.sender는 그 계정의 주소가 된다. 즉, msg.sender를 사용하면 스마트 컨트랙트를 실행하는 사용자 또는 다른 컨트랙트의 주소를 확인할 수 있어, 스마트 컨트랙트는 msg.sender를 기반으로 조건 분기 등의 로직을 구현할 수 있다. msg.sender는 스마트 계약 보안을 유지하기 위해 매우 중요하..