관리 메뉴

즐겁게, 코드

솔리디티 - 01. 기본 문법 1 (자료형과 연산) 본문

💬 언어/Solidity

솔리디티 - 01. 기본 문법 1 (자료형과 연산)

Chamming2 2021. 4. 15. 22:42

솔리디티(Solidity)는 *계약 지향 프로그래밍 언어로, 다양한 블록체인 플랫폼의 스마트 계약 로직을 작성할 때 사용됩니다.

(쉽게 설명하면 이더리움 계열의 블록체인은 솔리디티로 작성됐다고 보면 됩니다.)

TIP - 솔리디티를 처음 학습하는 입장이라면 이 "계약 지향" 이라는 말이 굉장히 생소하게 느껴질 수 있는데요, 보면서 느끼시겠지만 계약(contract)은 문법상 자바 등의 "클래스" 와 굉장히 유사한 구조입니다.

따라서, 앞으로 나올 "컨트랙트" 라는 말이 어색하다면 "클래스" 와 비슷한 개념이라고 어렴풋이 이해하고 계셔도 될 듯 합니다.

 

솔리디티의 큰 특징은 다음과 같습니다.

  • 정적 타입 언어
  • Ethereum Virtual Machine (EVM) 위에서 실행됨
  • 문장의 끝을 반드시 세미콜론(;)으로 표현함

솔리디티는 공식 IDE인 remix.ethereum.org/ 에서 실행할 수 있으며, visual studio나 VS Code에서도 지원합니다!

 

Remix - Ethereum IDE

 

remix.ethereum.org

1. 첫 사용시

pragma solidity ^0.4.19;

pragma solidity ^버전명 으로 사용할 솔리디티 언어 버전을 명시해줘야 함.

=> 그래야 컴파일러가 버전에 맞게 컴파일할 수 있음.

2. 컨트랙트

pragma solidity ^0.4.19;

contract ZombieFactory {

}

이더리움과 비트코인의 가장 큰 차이중 하나인 컨트랙트, 모든 코드의 실행은 이 "컨트랙트" 안에서 실행되어야 합니다.

(위에서 잠깐 언급했지만, 자바의 클래스와 유사합니다.)

3. 자료형

주요 자료형

  • uint (부호 없는 정수형) - uint는 기본적으로 256비트 자료형으로, 보다 작은 자료형은 uint32, uint64 등으로 선언할 수 있습니다.
  • int (정수형)
  • bool : 논리 자료형
  • string : UTF-8 인코딩 문자열
  • bytes : 바이트
  • address : 이더리움 주소 값 (0xaDc7192A0…)
pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
}

연산

솔리디티는 사칙연산과 나눗셈(모듈로) 연산, 지수 연산을 지원합니다.

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10 // b는 16의 10승
}

구조체

구조체는 struct 키워드로 생성할 수 있으며, 컨트랙트 내부에서 정의되어야 합니다.

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10 
    
    struct Zombie {
    	string name;
        uint dna;
    }
}

배열

솔리디티에는 정적 배열과 동적 배열이 존재합니다.

정적 배열 : uint[4] fixedArray 처럼 미리 사용할 배열의 크기를 지정함.

동적 배열 : uint[] dynamicArray 처럼 고정된 크기가 없어 계속 커질 수 있음.

new 키워드를 활용한 배열 : new uint[](5) 처럼 길이 인자를 반드시 명시해줘야 함.

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10 
    
    struct Zombie {
    	string name;
        uint dna;
    }
    
    Zombie[5] zombies; // Zombie 구조체를 저장하는 크기 5의 배열
}

public 속성 배열

배열에는 public 이라는 속성을 부여할 수도 있습니다.

public 속성과 함께 배열을 선언하면 다른 컨트랙트에서도 배열을 읽을 수 있게 되지만, 쓸 수는 없습니다.

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10 
    
    struct Zombie {
    	string name;
        uint dna;
    }
    
    Zombie[5] public zombies; // 다른 컨트랙트에서도 zombies 배열을 읽을 수(만) 있음.
}

 

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆