-
Enum & Interface & Library & ImportBlock-Chain/Solidity 2023. 4. 24. 17:51
Solidity의 Enum, 인터페이스, 라이브러리, 임포트에 대해 정리하였습니다.
< Enum >
enum은 사람이 읽을 수 있게, 개발자에 의해 정의된 상수세트 타입입니다.
특정한 상태/조건을 나타내기 위해 사용합니다.- 한 개의 enum당 256개까지 저장할 수 있고, 0~255까지 부여(uint8 = 0 ~ 255)
-> 상수세트이기에 enum은 uint로 변환하여 사용 가능
enum{ }
Ex)
enum CarStatus { TurnOff, TurnOn, Driving, Stop } CarStatus public carStatus; constructor() { carStatus = CarStatus.TurnOff; } event carCurrentStatus(CarStatus _carStatus, uint256 _carStatusInInt); function turnOnCar() public { require(carStatus == CarStatus(0), "To turn on, your car must be turned off"); carStatus = CarStatus(1); emit carCurrentStatus(carStatus,uint256(carStatus)); } function DrivingCar() public { require(carStatus == CarStatus.TurnOn, "To drive a car, your car must be turned on"); carStatus = CarStatus.Driving; emit carCurrentStatus(carStatus,uint256(carStatus)); } function StopCar() public { require(carStatus == CarStatus.Driving, "To drive a car, your car must be turned on"); carStatus = CarStatus.Stop; emit carCurrentStatus(carStatus,uint256(carStatus)); } function turnOffCar() public { require(carStatus == CarStatus.TurnOn || carStatus == CarStatus.Stop , "To turn off, your car must be turned on or driving"); carStatus = CarStatus.TurnOff; emit carCurrentStatus(carStatus,uint256(carStatus)); } function CheckStatus() public view returns(CarStatus) { return carStatus; }
< Interface >
Interface는 스마트컨트랙트 내에서 정의되어야 할 필요한 것들을 말합니다.
interface특징
- 함수는 external로 표시
- enum, struct 가능
- 변수, 생성자(constructor) 불가능
Ex)
interface ItemInfo { struct item { string name; uint256 price; } function addItemInfo(string memory _name, uint256 _price) external; function getItemInfo(uint256 _index) external view returns(item memory); } contract lecture39 is ItemInfo { item[] public itemList; function addItemInfo(string memory _name, uint256 _price) override public { itemList.push(item(_name, _price)); }; function getItemInfo(uint256 _index) override public view returns(item memory) { return itemList[_index]; } }
< library >
라이브러리는 다른 종류의 스마트 컨트랙트입니다.
< 라이브러리 사용의 이점과 제한사항 >
이점
1. 재사용 : 블록체인에 라이브러리가 배포되면, 다른 스마트컨트랙트들에 적용가능.
2. 가스 소비 줄임 : 중복되는 코드는 라이브러리를 사용하면 되기 때문에, 스마트컨트랙트의 사이즈/길이가 작아져 가스 소비를 줄일 수 있음.
제한사항
1. fallback 함수 불가 -> 라이브러리는 이더를 갖고 있을 수 없음.
2. 상속 불가
3. payable 함수 정의 불가Ex)
library SafeMath { function add(uint8 a, uint8 b) internal pure returns (uint8) { require(a + b >= a, "SafeMath: addition overflow"); return a + b; } } contract lecture40 { using SafeMath for uint8; uint8 public a; function becomeOverflow(uint8 _num1, uint8 _num2) public { a = SafeMath.add(_num1, _num2); } }
< import >
다른 장소에 있는 컨트랙트를 불러와 사용하기 위해 import를 사용합니다.
Ex)
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol"; contract lec41 { using SafeMath for uint256; uint256 public a; uint256 public maximum = 2**256 - 1; function becomeOverflow(uint256 _num1, uint256 _num2) public { a = _num1.add(_num2); } }
'Block-Chain > Solidity' 카테고리의 다른 글
Send Ethereum (0) 2023.04.04 Modifier & SPDX (0) 2023.03.22 에러 핸들러 (0) 2023.03.07 조건문 & 반복문 (0) 2023.02.15 Mapping & Array & struct(구조체) (0) 2023.01.16 - 한 개의 enum당 256개까지 저장할 수 있고, 0~255까지 부여(uint8 = 0 ~ 255)