Solidity 솔리디티 강좌 2 강 : data type

flowing1ife·2023년 7월 6일
0

[ Solidity 깨부수기 ]

목록 보기
2/29
post-thumbnail

Solidity 솔리디티 강좌 2 강 : data type

오늘은 Solidity 언어의 Data type에 대해 알아보도록 하자.


Data Type

📌 Solidity

Solidity 언어는 크게 3가지 타입으로 나뉜다.

data type, reference type, mapping type

이 중 data type에 대해 집중적으로 살펴보도록 하자.

💿 data type

data type에는 총 4가지가 존재한다.

boolean, bytes, address, uint

1. Boolean

▷  true / false를 나타내는 data type

// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.7.0 < 0.9.0;

contract lec2{
    // boolean : true / false
    bool public b = false;
    // ! || == && 연산자 존재 
    bool public b1 = !false; // true
    bool public b2 = false || true ; //true
    bool public b3 = false == true ; //false
    bool public b4 = false && true ; //false

}

data type, 접근 제한자, 변수명 순으로 작성한다.
위의 경우, data type은 boolean이며 접근 제한자는 public이다.
접근 제한자에 대해서는 추후 살펴보도록 한다.

📍 compile 단축키 : ctrl + s


👉 결과

2. Bytes

▷  이진데이터를 나타내는 data type

// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.7.0 < 0.9.0;

contract lec2{
    // boolean : true / false
    bool public b = false;
    // ! || == && 연산자 존재 
    bool public b1 = !false; // true
    bool public b2 = false || true ; //true
    bool public b3 = false == true ; //false
    bool public b4 = false && true ; //false
	
  	// 추가
    bytes4 public bt = 0x12345678;
    bytes public bt2 = "STRING";

}

bytes4의 경우, 4byte를 저장할 수 있다. 16진수 한자리는 4bit이기 때문에 위의 0x123456784bit * 8 = 32bit = 4byte이다.
bytes는 1~32 byte까지 저장이 가능하다. 따라서 string을 담으면 알아서 byte화 해서 저장한다.


👉 결과

3. Address

▷  이더를 송수신할 때 필요한 data type

// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.7.0 < 0.9.0;

contract lec2{
    // boolean : true / false
    bool public b = false;
    // ! || == && 연산자 존재 
    bool public b1 = !false; // true
    bool public b2 = false || true ; //true
    bool public b3 = false == true ; //false
    bool public b4 = false && true ; //false

    bytes4 public bt = 0x12345678;
    bytes public bt2 = "STRING";
  
  	//추가
  	address public addr = 0xf8e81D47203A594245E36C48e151709F0C19fBe8;

}

Deployed Contracts를 보면 사람 뿐만이 아니라 contract도 address를 가질 수 있다는 것을 알 수 있다. 나는 이 주소를 addr 변수에 넣어보았다.


👉 결과

4. uint

▷  부호 없는 정수를 표현하기 위해 사용되는 data type

// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.7.0 < 0.9.0;

contract lec2{
    // boolean : true / false
    bool public b = false;
    // ! || == && 연산자 존재 
    bool public b1 = !false; // true
    bool public b2 = false || true ; //true
    bool public b3 = false == true ; //false
    bool public b4 = false && true ; //false

    bytes4 public bt = 0x12345678;
    bytes public bt2 = "STRING";
  
  	address public addr = 0xf8e81D47203A594245E36C48e151709F0C19fBe8;
  
  	//추가
    int8 public it = 4;
    uint256 public uit = 132213;

}

int8의 경우, -2^7 ~ 2^7 - 1까지를 표현한다. uint8은 이와 다르게 0 ~ 2^8 - 1까지를 표현한다. 따라서 이 범위를 넘는 값을 넣으면 에러가 발생한다. 예를 들어 uint8에 256을 넣으면 uint8의 범위는 255까지이기 때문에 에러가 발생한다.
강의 내에서 말하기를, solidity 내에서는 마이너스를 사용하는 경우가 거의 없어서 uint를, 그 중에서도 범위가 가장 큰 uint256을 자주 사용한다고 한다.
기존의 수식인*, -, *, /를 모두 사용할 수 있다.


👉 결과


출처 및 참고 자료

profile
👩🏻‍💻 Backend Engineer, Contract Developer

0개의 댓글