오늘은
Solidity
에서uint
,bytes
,local variable
,array
,struct
,String과 Bytes 형변환
에 대해 배웠다.
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
구조체는 서로 다른 타입의 변수들을 하나로 묶어서 관리하기 위한 사용자 정의 데이터 타입이다.
또한 구조체 인스턴스를 생성하여 구조체 변수를 생성할 수 있다.
구조체의 멤버 변수에 접근하기 위해.
을 사용하여 접근할 수 있다.
솔리디티에서는 함수명이 같아도 인자의 개수나 타입이 다르면 다른 함수로 인식하는 함수 오버로딩을 지원한다.
함수 오버로딩은 코드의 가독성을 높이고, 함수 호출을 간소화하며, 코드를 보다 모듈화하고 재사용성을 높이는 등의 이점이 있다.