이더리움/솔리디티

[솔리디티] 5. 연산자, 전역 변수, 단위

라이튼 2023. 7. 13. 22:41

이전글

 

[솔리디티] 4. 생성자, 매개변수, 값 타입과 참조 타입, immutable

이전글 [솔리디티] 3. 자료형, 배열, 상수, 상태 변수 이전글 [솔리디티] 2. 리믹스 IDE 이전글 [솔리디티] 1. 솔리디티와 EVM 이전글 [솔리디티] 0. 들어가기 전에 앞으로 이어지는 솔리디티 글은 다음

kwjdnjs.tistory.com

 

연산자, 전역 변수, 단위

 이번글에서는 솔리디티에서 사용되는 연산자, 전역 변수, 단위에 대해 알아보겠습니다.

 

1. 연산자

 솔리디티에서 사용되는 더하기, 빼기, 곱하기, 나누기 등 기본적인 연산자는 다른 프로그래밍 언어와 동일합니다. 나눗셈의 경우 솔리디티에서는 실수형을 지원하지 않기 때문에 소수점 이하는 버리게 됩니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Operator {
    uint8 public sum;
    uint8 public difference;
    uint8 public multiplication;
    uint8 public division;
    uint8 public remainder;

    constructor(uint8 x, uint8 y) {
        sum = x + y;
        difference = x - y;
        multiplication = x * y;
        division = x / y;
        remainder = x % y;
    }
}

 

 '**'으로 거듭제곱을 사용할 수 있습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Operator {
    uint8 public pow;

    constructor(uint8 x, uint8 y) {
        pow = x ** y;
    }
}

 

 복합 연산자와 전위 증감, 후위 증감 연산자를 사용할 수 있습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Operator {
    uint8 a = 0;
    uint8 public b;
    uint8 public c;
    uint8 public d;

    constructor(uint8 x) {
        a += x;
        b = ++a;
        c = a++;
        d = --a;
    }
}

 

 비트 단위 연산자도 다른 프로그래밍 언어와 유사합니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Operator {
    uint8 public left;
    uint8 public right;

    uint8 public and;
    uint8 public or;
    uint8 public xor;
    uint8 public not;

    constructor(uint8 x, uint8 y) {
        left = x << y;
        right = x >> y;

        and = x & y;
        or = x | y;
        xor = x ^ y;
        not = ~x;
    }
}

 

 논리 연산자도 다른 프로그래밍 언어와 유사합니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Operator {
    bool public and;
    bool public or;
    bool public not;

    constructor(bool x, bool y) {
        and = x && y;
        or = x || y;
        not = !x;
    }
}

 

 비교 연산자 역시 다른 프로그래밍 언어와 유사합니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Operator {
    bool public eq;
    bool public neq;
    bool public gt;
    bool public ge;
    bool public lt;
    bool public le;

    constructor(uint8 x, uint8 y) {
        eq = x == y;
        neq = x != y;
        gt = x > y;
        ge = x >= y;
        lt = x < y;
        le = x <= y;
    }
}

 

2. 전역 변수

 솔리디티에는 블록체인 정보를 담고 있는 전역 변수가 존재합니다. 미리 정의된 전역 변수를 호출하여 블록체인과 관련된 값을 불러올 수 있습니다. 예를 들어 msg.sender를 이용하면 트랜잭션을 전송한 EOA의 주소를 얻을 수 있습니다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Global {
    address public a;

    constructor() {
        a = msg.sender;
    }
}

 

3. 단위

 마지막으로 솔리디티에서 지원하는 단위에 대해 알아보겠습니다.

 

 솔리디티에서 사용하는 이더의 단위는 wei입니다. 다만 1 이더는 10^18 wei로 단위 차이가 큰 만큼 wei만으로 사용하기에는 어려움이 있습니다. 따라서 솔리디티에서는 단위 관련 키워드를 제공하여 여러 단위를 쉽게 사용할 수 있도록 하고 있습니다. 참고로 gwei는 10^9 wei입니다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Unit {
    uint public w = 1 wei;
    uint public gw = 1 gwei;
    uint public eth = 1 ether;
}

 

 이외에도 솔리디티에서는 시간 관련 단위를 지원하고 있습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Unit {
    uint public sec = 1 seconds;
    uint public min = 1 minutes;
    uint public hour = 1 hours;
    uint public day = 1 days;
    uint public week = 1 weeks;
}

 

 지금까지 연산자, 전역 변수, 단위에 대해 알아봤습니다. 감사합니다.

 

 

다음글

 

[솔리디티] 6. 함수, 가시성 지정자, 반환 값, 지역 변수

이전글 [솔리디티] 5. 연산자, 전역 변수, 단위 이전글 [솔리디티] 4. 생성자, 매개변수, 값 타입과 참조 타입, immutable 이전글 [솔리디티] 3. 자료형, 배열, 상수, 상태 변수 이전글 [솔리디티] 2. 리믹

kwjdnjs.tistory.com