본문 바로가기

web3 공부 (24.7. 15 ~ )/3주차

3주차 - 솔리디티 단위,저장영역, 접근제한자 4개,조건문

사실 순서는 뒤죽박죽이 되버렸지만, 나중에 정리는 한꺼번에 하는걸로....

먼저, 간단하게 솔리디티에 대해 정말 간단하게 설명하고 넘어가겠습니다.

 

💡 솔리디티(Solidity)이란?

  • 솔리디티는 이더리움 및 EVM 호환 블록체인용 스마트 계약을 작성하기 위해 개발된 고급 프로그래밍 언어임
  • JavaScript, Python, C++ 문법에서 영감을 받았으며, 정적 타입과 객체지향언어의 특성을 가지고 있음

언어특징

  • 함수 시그니처, 상태 변수 등이 엄격히 정의되며, 라이브러리·인터페이스 등의 지원으로 재사용성을 높임
  • 이벤트 특성으로 계약 외부로 상태 변화를 알리는 로그 기능을 제공하여 프론트엔드 연동에 활용됨
  • 배열이나 맵 등 자료구조 안전 검사, gas 한도 내에서만 제한적으로 실행되도록 설계되어 있어 안정성이 높은 편 

이더리움에서 가장 중요한 개념 중 하나는 트랜잭션 실행 수수료입니다.

이러디움에서 트랜잭션의 결과로 발생하는 모든 연산은 수수료를 요구하며, 이 수수료를 가스(gas)라 합니다.

자세한 단위에 대한 설명은 아래와 같습니다.

💡gas, gwei, wei 단위

이더리움 네트워크에서 스마트 컨트랙트를 실행하려면 가스 비용이 필요하는데요,

가스는 스마트 컨트랙트 및 트랜잭션 실행에 필요한 연산 비용을 측정하는 단위입니다.

  • Wei: 이더리움의 최소 단위 (1 Ether = 10^18 Wei)
  • Gwei: 1 Gwei = 10^9 Wei
  • Gas: 특정 작업을 수행하는 데 필요한 연산 비용을 측정하는 단위

트랜잭션의 총 비용은 `가스 가격 * 가스 사용량`으로 계산되는데, 가스 가격은 보통 Gwei 단위로 표시됩니다.

 

사진출처 : 아래 링크

 

이더리움 스마트 컨트랙트의 실행 비용

💡스마트 컨트랙트의 실행 비용 이더리움에서 가장 중요한 개념 중 하나는 트랜잭션 실행 수수료이다. 이더리움에서 트랜잭션의 결과로 발생하는 모든 연산은 수수료를 요구하며, 이 수수료를

ejh-crypto-lab.tistory.com

이더리움은 비트코인과는 달리, 스마트 컨트랙트에서 수행되는 모든 연산에 대해 가스라는 수수료를 부과합니다.

이렇게 수수료를 부과하는 이유는 이더리움 네트워크 위에서 독작하는 스마트 컨트랙트 작업들이 전체 노드에 영향을 미치기 때문입니다. 

 

💡솔리디티 저장영역

 

  • Storage: 영구 저장소로, 블록체인에 영구적으로 저장됨. 상태 변수는 기본적으로 여기 저장됩니다.
  • Memory: 함수 호출 동안만 유지되는 일시적 저장소. 함수 내에서 로컬 변수를 선언할 때 사용됩니다.
  • Stack: 매우 제한된 공간으로, 작은 지역 변수에 사용됨. EVM(Ethereum Virtual Machine)에서 기본적으로 사용하는 저장 공간입니다.

 

 


💡조건문 및 반복문

일반적인 조건문 (if-else)와 반복문 (for,while)은 아래 코드와 같은 형식입니다.

if (x > 10) {
    // do something
} else {
    // do something else
}
for (int i = 0; i < 10; i++) {
    // do something
}

int j = 0;
while (j < 10) {
    // do something
    j++;
}

 

그럼, 솔리디티는 일반적인 조건문과 반복문을 어떻게 지원할까요?

아래의 예시 코드를 작성해보았습니다.

 

checkValue 값에 15를 넣으니 if 조건일때 나오는 문장이 나오는걸 볼 수 있다.
checkValue 값에 5를 넣으니 else 조건일때 나오는 문장이 나오는걸 볼 수 있다.


💡솔리디티 함수 특징

솔리디티 함수는 다양한 속성을 가지고 있습니다.

➡️접근제어자 - Visibility (가시성)

변수에 대해서 가시성, 즉 Visibility를 지정하는 것과 유사한 방법으로 함수에 대해서도 가시성, Visibility를 지정할 수 있습니다.

  • public: 어디서든 접근 가능
  • private: 선언된 컨트랙트 내에서만 접근 가능
  • internal: 선언된 컨트랙트와 이를 상속받은 컨트랙트에서 접근 가능
  • external: 외부에서만 접근 가능 (내부 호출 불가)


➡️State Mutability (상태 변경성)

솔리디티의 함수는 상태변경성, 즉, state mutability라는 속성을 가지는데요. 이는 함수의 권한범위를 지정하는 것과 비슷한 개념입니다.

  • pure: 상태를 변경하지 않으며, 블록체인 상태를 읽지 않음
  • view: 상태를 변경하지 않지만, 블록체인 상태를 읽음
  • payable: 이더를 송수신할 수 있음

 


💡다양한 예외처리 방법

솔리디티에서 예외를 처리하는 방법에는 require, assert, revert가 있습니다.

  • require: 조건이 참인지 확인, 조건이 거짓이면 트랜잭션을 되돌리고 남은 가스를 반환
  • assert: 내부 오류를 확인, 조건이 거짓이면 트랜잭션을 되돌리고 모든 가스를 소모
  • revert: 조건이 맞지 않을 때 실행 취소, 커스텀 에러 메시지를 포함할 수 있음