📍 자료형 뒤에 붙는 숫자는 bits 또는 bytes를 의미
- 8bits = 1bytes = 16진수 2자리 = 0 ~ ff(16진수) = 0 ~ 255(10진수)
- 용량이 다르다 = 표현할 수 있는 최댓값의 크기가 다르다
uint
uint8
uint16
...uint256
과 같이 나타냄- 뒤에 붙은 숫자의 단위는 bit
uint
의 경우,uint256
를 의미- 기본값 : 0
input의 경우, uint256->uint8과 같이 더 작은 용량으로는 변환 가능
output의 경우, uint8->uint256과 같이 큰 용량으로는 변환 가능
- 대소문자 구분 가능
: 아스키코드(ASCII)로 변환되어 저장되기 때문- string을 지역변수로 선언 시 memory를 반드시 적어주어야 함
🔎 memory
: string의 경우 어디위치에 있는 어떤 값을 사용할 것 인지를 명시해 주어야 함
: memory의 경우 휘발성이며 가스 효율이 높음🔎 Storage vs Memory
: Storage store data in blockchain and it remains immutable. Memory store temporary variables, that included in functions and their lifetime limited while executing this function. So when we pass string _name as a function argument, it will be assigned to memory, while your variable in struct(name) will be assingned to storage.
: memory는 (복사본이기 때문에) 상대적으로 수정이 쉬움. calldata는 원본이라 memory보다 수정이 어려움.
※가스 효율을 높이기 위해 memory와 calldata를 구분해 줌
bytes
bytes1
bytes2
...bytes32
과 같이 나타냄
: 선언할 수 있는 정적인 값중엔bytes32
(64자리)가 최대- 뒤에 붙은 숫자의 단위는 byte
bytes
의 경우, 문자형과 동일하게 memory를 적어줘야 함
:bytes memory
는 무한대
: bytrs32 != bytes memory
( 32는 정적으로 정해져있음, memory는 동적으로 존재 )
: bytes 뒤에 자릿수 설정하는 것이 좋음 ; 가스비 절감을 위하여bytes //0x ; 무한(동적) bytes1 //0x00 ; 1byte = 8bits =2자리 bytes2 //0x0000 ; 2 = 4자리 bytes32 //32 = 64자리
- 기본값 : 0x (16진수 표시)
- 아스키코드(ASCII)를 사용하기 때문에 기본 값이 0x로 나움
- "16"의 경우 문자로 "1","6"인식하기 때문에 0x3136으로 출력 됨
- bytes의 경우 input, output의 자릿수를 맞춰 주어야 함
- 20bytes 크기 (16진수; 40자리; 정적)
- address != bytes20
: address가 20 bytes이지만, 길이가 일치할 뿐 두 개가 같은 건 아님
: 엄연히 다른 형이기 때문에 byte로 사용하려면 형 변환 필요bytes20(address) // bytes20 address(bytes20) // address bytes20(address)[0] // bytes1
- 모든 스마트 컨트렉트는 주소를 가지고 있음
// 배포한 스마트 컨트렉트의 주소 조회 function getAdderess() public view returns (address){ return address(this); } // 내 account주소 조회 function getMyAddress() public view returns(address){ return address(msg.sender); } // 잔고 조회 (실제 잔고와 조금 차이남) function getMyBalance() public view returns(uint){ return address(msg.sender).balance; } // bytes20 -> address 변환 function setA2(bytes20 _a) public { a = address(_a); }
- 같은 자료형들이 들어있는 집합
자료형 [] array이름
- 넣을 때는 왼쪽에서부터 차례로 쌓이고(push), 뺄 때는 뒤에서부터 제거(pop)
- 삭제의 경우 값을 초기화 시킴
배열.push(); //넣기 배열.pop(); //빼기 배열[n]=새로운 값; //바꾸기 delete 배열[]; //삭제
참고자료