Solidity 문법 - (15) struct (타입)

2023. 6. 1. 00:34BlockChain/Solidity 깨부수기 ( 유투브 강의 )

목차
1. Struct( 구조체 )
2. Struct 예제코드

 

1. Struct ( 구조체 )

 

struct 타입은 구조체를 새로 만드는 것이다.

 

typescript의 인터페이스와 같이 미리 객체 형태의 구조를 설정하여 타입을 명시해주는 것이다.

 

struct를 사용하는 문법은 다음의 예시를 보도록 하자.

 

struct Person {
    string name;
    uint256 age;
    uint256 height;
}

 

컨트랙트 전역에 선언하여 함수에서 Person이라는 타입으로 사용이 가능하다.

 

 

https://char1ey.tistory.com/134

 

Solidity 문법 - (2) 솔리디티 타입

목차 1. 솔리디티 타입 2. 타입 예제 코드 1. 솔리디티 타입 Solidity에서 쓰이는 타입들에 대해서 알아보자. 솔리디티에서는 크게 세 가지의 타입이 있다. data type boolean - 참, 거짓을 나타낸다. bytes -

char1ey.tistory.com

 

솔리디티의 타입에서 설명했듯이 struct 타입은 string과 Array와 같이 reference 타입이므로

 

함수에서 사용할 때에는 memory를 적어주어야 한다.

(storage가 아닌 memory에 저장 되므로)

 

예제 코드를 보면서 사용방법을 익혀보자.

 

 

 

2. struct 예제코드

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract EStruct {

    struct Person {
        string name;
        uint256 age;
        uint256 height;
    }
    
    mapping(uint256 => Person) public PersonMapping;
    Person[] public PersonArray;

    function createPerson(string memory _name, uint256 _age, uint256 _height) public pure returns(Person memory){
        return Person(_name, _age, _height);
    }

    function createPersonMapping(uint256 _key, string memory _name, uint256 _age, uint256 _height) public {
        PersonMapping[_key] = Person(_name, _age, _height);
    }

    function getPersonMapping(uint256 _key) public view returns(Person memory) {
        return PersonMapping[_key];
    }

    function createPersonArray(string memory _name, uint256 _age, uint256 _height) public {
        PersonArray.push(Person(_name, _age, _height));
    }

    function getPersonArray(uint256 _key) public view returns(Person memory) {
        return PersonArray[_key];
    }
}

 

struct는 데이터의 타입을 선언하는 것과 비슷하다.

 

리턴에 struct를 하나의 타입으로 선언하여 적어주면 struct안의 내용을 적지 않아도된다.

 

struct는 객체처럼 하나의 변수에 여러가지의 변수들을 넣어주기 위해서 사용한다.

 

※ 솔리디티에서의 return은 함수를 호출한 곳에 전달이 될 뿐 솔리디티 어딘가에 저장이 되지 않는다.

 

따라서 위의 예제코드 대부분에서는 전역에 배열이나 mapping을 선언하여 struct 들을 담는 저장소 역할을 한다.