728x90
구조체
사용자 정의 자료형이라고도 부르는 구조체는 변수의 묶음으로 이해할 수 있습니다. 결국은 자료형이기에 배열을 만들 수도 있고 맵핑을 만들 수도 있습니다. 우선 구조체를 만드는 방법부터 보도록 하겠습니다.
struct character{
string _name;
string _job;
uint _level;
}
위의 예시를 보시면 캐릭터라는 자료형을 가진 구조체 안에 이름, 직업, 그리고 레벨이 들어가 있습니다. 이와 같이 꼭 필요로 하는 자료들을 묶어서 구조체를 만들 수 있습니다. 캐릭터를 만들 때마다 이름, 직업, 그리고 레벨을 입력하기 위한 변수를 따로 만들지 않아도 되므로 코드가 간소화될 수 있습니다.
mapping (uint => character) public characterList;
function makeCharactor(uint _num, string memory _name, string memory _job, uint _level) public {
charactorList[_num] = charactor(_name, _job, _level);
}
character라는 구조체는 자료형이 되었기 때문에 mapping을 사용 시 데이터 값의 자료형으로 사용할 수 있습니다. 따라서 만든 캐릭터들의 목록을 볼 수 있는 characterList라는 맵핑을 만들고 makeCharacter함수를 작성하였습니다. 여기서 주의하실 점은 함수에서 사용된 string은 지역변수로 저장소에 저장을 하지 않고 메모리에 저장을 하여야 하므로 타입과 변수 명 사이에 memory를 입력하여 메모리에 저장해줍니다. 캐릭터를 만드는 것과 비슷하게 다양한 객체가 동일한 자료를 가지는 경우 구조체를 만들어 사용하면 좋습니다.
character firstCharacter;
firstCharacter._name = king;
firstCharacter._job = warrior;
firstCharacter._level = 99;
위와 같은 경우는 구조체 안의 이름, 직업, 그리고 레벨을 각각 선언해주는 방법입니다. firstCharacter이라는 이름을 가진 변수를 선언해주고 그 안의 정보를 사용할 때는 firstCharacter._name등과 같이 불러올 수 있습니다.
728x90