- 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입
- 여러 자료형을 가진 변수들을 하나로 묶어 자료형으로 사용
//구조체 선언 struct Student{ string name; string gender; uint number; uint birthdate; } Student s; //Student형 변수 s Student[] students; // Student 형 변수들의 array students
- 관련있는 상수(고정된 값)들의 집합
- 비슷한 상태의 변수들을 묶어서 숫자로 관리 ; uint8
- uint8은
숫자 → 숫자
이지만, enum의 경우string → 숫자
형태로 반환됨- 사전 정의된 값 중 하나만 갖도록 변수를 제한하는 사용자 정의 데이터 유형
ex ) 예약중, 예약완료, 예약취소- 변수를 지속적으로 트래킹, 참조 때 사용
- enum의 초기값 : 0
대표적인 예 (Boolean 자료형)
: False == 0, True == 1으로 False, True 값이 미리 정의된 열거형으로 볼 수 있다.
- EXAMPLE CODE
contract ENUM{ //enum 선언 enum Food{ Chicken, //0 Suish, //1 Bread, //2 Coconut //3 } //Food형 변수 선언 Food a; Food b; Food c; //각 변수 상태 지정 function setA() public { a = Food.Chicken; } function setB() public { b = Food.Suish; } function setC() public { c = Food.Bread; } function getABC() public view returns(Food, Food,Food){ return (a,b,c); } //uint형으로 반환 function getABC2() public view returns(uint8, uint8,uint8){ return (uint8(a),uint8(b),uint8(c)); } }
Value 검색
1. for문으로 반복해서 찾는 법 : 주로 array에서 사용
2. key-value를 통해 찾는 법 : mapping
Mapping
: key를 통해 value를 조회
ex) 지갑주소- key / balance- value : 지갑주소를 통해 잔고 조회
:mapping(자료형 => 자료형) mapping 이름;
:key의 자료형
=>value의 자료형
//mapping(자료형 => 자료형) mapping 이름; mapping(string=> uint) height; // 정보 넣기 : mapping이름 [key값] = value값 function setHeight(string memory _name, uint _h) public { height[_name] = _h; } //정보 받기 : mapping이름 [key값] function getHeight(string memory _name) public view returns(uint){ return height[_name]; } //정보 삭제 : 초기값으로 변경 (uint의 경우 0) function deleteHeight(string memory _name) public { delete height[_name]; }
- 다중매핑을 통해서 검색 기능을 확장 할 수 있음
ex) 3학년 여학생의 평균점수 :mapping(3학년 => mapping(여학생 => 평균점수))
//예시 struct user{ uint number; string name; } //단일 매핑 2개로 선언 mapping(address => mapping (string=> uint)) bankAccounts; mapping(address => mapping (string=> user)) bankAccounts2; //이중매핑 값 선언 mapping(string=>mapping(string=>mapping(uint=>user))) bankAccounts3; //이중매핑에 값 저장 function setBankAccounts(string calldata _name) public { bankAccounts[msg.sender][_name] = 100; } //저장된 이중매핑 값 읽기 function getbankAccounts(address _addr, string calldata _name) public view returns(uint) { return bankAccounts[_addr][_name]; } }