본문 바로가기
블록체인/WEB3 개발

솔리디티란?

by 제이제이_은재 2022. 7. 8.
반응형

 

💡 솔리디티란?

 

솔리디티는 객체 지향 프로그래밍 언어로써, 이더리움 블록체인 플랫폼에 다양한 스마트 컨트랜트를 작성할 때 사용된다. 예를 들면, 투표, 크라우드 펀딩, 블라인드 경매, 다중 서명 지갑등에 사용될 수 있다. 솔리디티의 큰 특징은 다음과 같다.

 

1) 정적 타입의 중괄호 언어: 솔리디티는 정적타입의 중괄호 프로그래밍 언어이다. 우리가 앞서 배운 자바스크립트와 달리 컴파일 시에 변수에 타입이 결정되는 언어이다. 그렇기에 소스 코드에 타입을 명확하게 정의해줘야 한다.

2) Ethereum Virtual Machine(EVM): 솔리디티는 EVM이라는 이더리움 가상 스택 머신 위에서 동작한다.

3) 세미콜론(;): 마지막으로 솔리디티는 문장의 끝에 반드시 세미콜론을 붙여야 한다.

 

 

✓ 솔리디티의 사용법과 기본 문법

 

SPDX License Identifier

스마트 컨트랙트에 대한 신뢰를 높이고, 저작권과 같은 문제를 해소하기 위해 솔리디티 코드의 최상단에 SPDX 라이센스를 명시해야 한다. SPDX 라이센스 리스트는 주석으로 표기하고, 라이센스 리스트는 https://spdx.org/licenses/ 에서 확인할 수 있다.

 

// SPDX-License-Identifier: MIT
// SPDX-License-Identifier: GPL-3.0

 

 

Pragma

Pragma 키워드는 특정 컴파일러의 버전을 표기할 때 사용한다. 즉, 솔리디티 컴파일러와 호환성을 지칭하는 것으로 이 코드에서는 해당 버전의 컴파일러가 필요하다라는 것을 명시하는 것이다. Pragma는 모든 소스 코드 파일에 있어야 하며, 다른 파일을 임포트 하더라도, pragma는 자동으로 임포트 되지 않는다. 일반적으로 다음과 같이 파일 최상단에 작성한다.

 

// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.14;  // 0.8.14 버전을 사용합니다

 

 특정 버전 이상의 pragma를 사용할 때는 ^를 붙인다.

 

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.14;  // 0.8.14 이상의 버전을 사용합니다
SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0; // 0.4.0 이상 0.9.0 미만의 버전을 사용합니다

 

그 외에도 다양한 버전 규칙을 사용할 수 있으며, 버전 규칙은 npm 문법과 동일하다.

 

 

Contract

솔리디티 계약은 이더리움 블록체인의 특정 주소를 가진 기능(코드) 와 상태(데이터)의 모음이다. 여기서 특정 기능은 함수로 표현, 상태는 변수료 표현한다. 마치 일반적인 객체 지향 언의 클래스를 정의하듯이 하나의 contract(계약)을 정의한다.

 

contract SimpleStorage {
    uint storedData; // 상태 변수
    
		// 함수
    function set(uint x) public {
        storedData = x;
    }
		// 함수
    function get() public view returns (uint) {
        return storedData;
    }
}

 

 

Import

파일을 임포트 하는 방식은 자바스크립트에 사용하는 방식과 동일하다.

import "파일이름";

// 임포트하는 파일을 symbolName이라는 이름으로 사용
import * as symbolName from "파일이름";
import "파일이름" as symbolName;

// 파일의 일부분만 임포트 하는 경우
import {symbol1 as alias, symbol2} from "파일이름";

 

 

주석

단일 라인 주석 처리는(//), 여러 라인 주석 처리는 (/*...*/)로 진행한다.

// 단일 라인 주석입니다.

/*
이것은
여러 라인 주석입니다.
*/

 

반응형

댓글