Solidity 문법 - (26) enum
2023. 6. 4. 21:26ㆍBlockChain/Solidity 깨부수기 ( 유투브 강의 )
| 목차 |
| 1. enum |
| 2. enum 예제코드 |
1. enum
enum을 사용하는 방법에 대해서 간단하게 알아보도록 하자.
enum을 사용하는 이유는 특정한 상태의 조건을 나타내기 위해서 사용한다.
enum 안에 여러가지 상태를 기술해놓고, 그 상태일 경우 어떤 동작을 할지 조건문을 써주는 식으로 활용이 가능하다.
선언 방법
enum [변수명] {
[enum 변수명],
[enum 변수명],
[enum 변수명],
...
}
사용 방법
// 선언된 enum 사용
[변수명] 접근제한자 [enum 변수명]
// enum안의 값 사용법
[변수명].[enum 변수명]
2. enum 예제코드
다음의 코드는 각 함수를 실행할 때 enum을 이용해 상태를 변경해주는 컨트랙트이다.
차의 상태에 따라 시동걸기, 시동끄기, 운전중, 멈추기 등등을 나타낸다.
각 enum은 마지막 함수를 통해서 값을 출력했을 경우 uint8의 값으로 볼 수 있다.
출력값이 uint8이라고해서 returns안에 uint8이라고 적으면 안되고 enum 변수명을 적어주어야 에러가 나지 않는다.
인덱스와 같이 표현되므로 아래의 TurnOff, TurnOn, Driving, Stop은 각각 0, 1, 2, 3으로 표현된다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 < 0.9.0;
contract ExEnum{
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;
}
}
위의 예제 코드는 솔리디티 깨부수기를 그대로 가져왔다.
https://github.com/D-One0914/BreakingSolidityBasic/blob/main/lec38.sol
'BlockChain > Solidity 깨부수기 ( 유투브 강의 )' 카테고리의 다른 글
| Solidity 문법 - (25) Call과 DelegateCall (0) | 2023.06.04 |
|---|---|
| Solidity 문법 - (24) fallback (0) | 2023.06.04 |
| Solidity 문법 - (23) msg.balance (사용자 잔액) (0) | 2023.06.04 |
| Solidity 문법 - (22) payable 키워드 (0) | 2023.06.04 |
| Solidity 문법 - (21) modifier (0) | 2023.06.04 |