solidity 자료형2

HyeongA·2023년 5월 5일
0

Blockchain_dev

목록 보기
3/20
post-thumbnail

👉 자료형 1편 보러가기

1. Struct (구조체)

  • 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입
  • 여러 자료형을 가진 변수들을 하나로 묶어 자료형으로 사용
//구조체 선언
    struct Student{
        string name;
        string gender;
        uint number;
        uint birthdate;
    } 
    Student s; 				//Student형 변수 s
    Student[] students; 	// Student 형 변수들의 array students

2. Enum (열거형)

  • 관련있는 상수(고정된 값)들의 집합
  • 비슷한 상태의 변수들을 묶어서 숫자로 관리 ; 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));
   }
}

3. Mapping

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];
}

3.2. multi mapping (다중매핑)

  • 다중매핑을 통해서 검색 기능을 확장 할 수 있음
    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];
    }
}

profile
Solidity | React | Python

0개의 댓글