구조체
- 함수 외부에서 구조체 메소드 명시: 스토리지 저장
- 함수 내부에서 구조체 메소드 명시: 메모리 저장
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| contract sample { struct myStruct { bool myBool; string myString; } myString s1; myStruct s2 = myStruct(true, ""); function sample(bool initBool, stirng initString) { s1 = myStruct(initBool, initString); mySturct memory s3 = myStruct(initBool, initString); } }
|
열거형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| contract sample { enum OS { windows, Linux, OSX, UNIX } OS choice; function sample(OS chosen) { choice = chosen; } function setLinuxOS() { choice OS.Linux; } function getChoice() returns (OS chosenOS) { return choice; } }
|
매핑
스토리지에만 사용할 수 있기 때문에 오직 상태 변수로만 선언된다. 매핑은 키-값의 쌍으로 이루어진 해시 테이블이다. 키는 실제로 저장되지 않고, 키의 keccak256 해시 값이 검색에 사용된다. 매핑은 길이를 가지지 않으며, 다른 매핑에 할당될 수 없다.
1 2 3 4 5 6 7 8 9 10
| contract sample { mapping (int => string) myMap; function sample(int key, string value) { myMap[key] = value; mapping(int => string) myMap2 = myMap; } }
|
delete 연산자
delete
는 어떤 변수라도 기본값으로 재설정하기 위해 사용될 수 있다.
동적 배열에 delete
를 적용하면 모든 요소가 지워지고 길이가 0이 된다. 정적 배열에 적용하면 모든 인덱스가 재설정된다. 물론 특정 인덱스에만 적용하는 것도 가능하다.
맵에 delete
를 적용하면 아무 일도 발생하지 않지만, 맵의 key에 delete
를 적용하면 키와 연관된 값이 삭제된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| contract sample { struct Struct { mapping (int => string) myMap; int myNumber; } int[] myArray; Struct myStruct; function sample(int key, int value, int number, int[] array) { myStruct = Struct(number); myStruct.myMap[key] = value; myArray = array; } function reset() { delete myArray; delete myStruct; } function deleteKey(int key) { delete myStruct.myMap[key]; } }
|
✯ 이 포스트의 모든 내용은 이더리움을 활용한 블록체인 프로젝트 구축(에이콘) 책을 참고하여 작성되었습니다.