[TIL] 2023-05-04

Melon Coder·2023년 5월 4일
0

TIL

목록 보기
28/50
post-thumbnail

Today I Learned


[BlockChain]

오늘은 Solidity에서 uint, bytes, local variable, array, struct, String과 Bytes 형변환에 대해 배웠다.


Type

uint / int

솔리디티에서 숫자형 타입은 각각 부호 없는 정수 / 부호 있는 정수를 나타낸다.
8비트 단위로 uint8 / int8 ~ 부터 uint256 / int256 까지 존재한다.
uint / int는 uint256 / int256과 같은 타입이다.

uint8에서 '8'은 비트 크기를 나타내며 8비트는 1바이트이다.
즉 uint8은 16진수 2자리로 나타낼 수 있고 0에서 ff까지의 범위안의 정수 값을 선언할 수 있다.
또한 10진수로 0에서 255안의 범위의 정수를 선언할 수 있다.
0에서 255인 이유는 우선 f가 15이고 ff를 10진수로 표현했을 때 15*16^1 + 15*16^0, 즉 255 이기 때문이다.
이처럼 uint16이면 0에서 15*16^3+15*16^2+15*16^1+15*16^0, 즉 65535 까지 이다.

byte

바이트 타입은 고정된 크기의 바이트 배열을 나타내는 bytes1, bytes2, bytes3, ... , bytes32가 있다.
위 타입은 정적인 바이트 배열로 해당 크기의 데이터만 저장될 수 있다.
또한 bytes1은 1바이트 크기로 즉 8비트 그러니까 16진수로 2자리를 나타낼 수 있다.

반면에 bytes는 동적 크기의 바이트 배열로 사실상 무한정의 크기를 가지고 있다.
따라서 데이터 크기를 제한할 수 있는 바이트 타입이라면 고정 크기의 바이트 타입을 사용하는 것이 좋다 그 이유는 공간 절약을 할 수 있어 가스비 절감이 가능하기 때문이다.

array

솔리디티에서 배열은 같은 자료형들이 들어있는 집합이고 고정 크기 배열과 동적 크기 배열이 있다.
고정 크기 배열은 uint[5] students 이런식으로 배열의 크기를 고정시켜 준다.
반면 동적 크기 배열은 uint[] students 이런식으로 나타낸다.
크기가 실행시점에 배열의 크기가 동적으로 결정된다.
또한 동적 크기 배열에서는 push, pop과 같이 배열 끝에 추가와 삭제를 할 수 있는 멤버가 지원되지만,
정적 크기 배열에서는 멤버를 사용할 수 없고 직접 배열에 요소를 할당해주어야한다.

struct

구조체는 서로 다른 타입의 변수들을 하나로 묶어서 관리하기 위한 사용자 정의 데이터 타입이다.
또한 구조체 인스턴스를 생성하여 구조체 변수를 생성할 수 있다.
구조체의 멤버 변수에 접근하기 위해 .을 사용하여 접근할 수 있다.

Function Overloading

솔리디티에서는 함수명이 같아도 인자의 개수나 타입이 다르면 다른 함수로 인식하는 함수 오버로딩을 지원한다.
함수 오버로딩은 코드의 가독성을 높이고, 함수 호출을 간소화하며, 코드를 보다 모듈화하고 재사용성을 높이는 등의 이점이 있다.

0개의 댓글