상세 컨텐츠

본문 제목

솔리디티 강좌 20강 struct (구조체)

솔리디티 깨부수기 - 기본

by D_One 2021. 9. 20. 13:08

본문


유튜브를 통해, 쉽고 간편하게 이해 해보아요!

https://youtu.be/Q1EIEGfb9lg

 

- YouTube

 

www.youtube.com

구독/좋아요 해주셔서 감사합니다 :) !!


 

안녕하세요, 

오늘은 struct 구조체에 대해서 배워 볼게요.

 

구조체는 말그대로 저희만의 구조 즉 타입을 만드는 거예요. 

 

구조체는 

 

struct 구조체명 {

    타입 변수명,

    타입 변수명,

     .....

 

이런식으로 정의가 된답니다.

 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract lec20{
    struct Character{
        uint256 age;
        string name;
        string job;
    }
    
}

예시로 저희는 Chracter라는 아주 간단한 구조체를 만들었습니다.

character 안에는 age, name, job 이라는 변수들이 들어 있습니다.

 

자 그럼 이걸한번 생성해보도록할게요.

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract lec20{
    struct Character{
        uint256 age;
        string name;
        string job;
    }
    

    function createCharacter(uint256 _age,string memory _name,string memory _job) public pure{
        Character(_age,_name,_job);
    }
    
 
}

위와 같이 createCharacter 함수로 만들 수가 있겠네요.

 

그러나 이렇게 만든다고해도, 따로 반환이 안되기에,

 

저희는 이 구조체를 mapping 과 array에 각각 넣어 보도록 해볼게요.

먼저 넣기 위해서 mapping 과 array에 이 구조체 타입을 정의해야겠죠.

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract lec20{
    struct Character{
        uint256 age;
        string name;
        string job;
    }
    
    mapping(uint256=>Character) public CharacterMapping;
    Character[] public CharacterArray;
    
    
}

위와 같은식으로 Character 타입을 갖는 mapping과 array를 만들었네요

 

자 그러면 넣고, 반환 하도록 해볼게요

 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract lec20{
    struct Character{
        uint256 age;
        string name;
        string job;
    }
    
    mapping(uint256=>Character) public CharacterMapping;
    Character[] public CharacterArray;
    
    function createCharacter(uint256 _age,string memory _name,string memory _job) pure public returns(Character memory) {
        return Character(_age,_name,_job);
    }
    
    function createChracterMapping(uint256 _key, uint256 _age,string memory _name,string memory _job )  public {
       CharacterMapping[_key] = Character(_age,_name,_job);
    }
    
    function getChracterMapping(uint256 _key)  public view returns(Character memory){
       return CharacterMapping[_key];
    }
    
    function createChracterArray(uint256 _age,string memory _name,string memory _job )  public {
       CharacterArray.push(Character(_age,_name,_job));
    }
    
    function getChracterArray(uint256 _index)  public view returns(Character memory){
       return CharacterMapping[_index];
    }
}

위와 같이 지난번 강의때 배운 mapping과 array에 넣는법, 반환하는법과 동일하게, 위의 코드와 적용 할 수 있겠죠

관련글 더보기