Let's make Everything

[Constructor] 본문

Solidity

[Constructor]

rok92 2023. 5. 29. 11:21
728x90

# 1. 생성자란?

생성자는 스마트 컨트랙트가 생성 또는 배포, 인스턴스화 될 때 초기값을 설정해 주는 용도로 사용됩니다.

간단한 예시를 통해 보겠습니다.

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

contract A{
    
    string public name;
    uint256 public age;
    
    constructor(string memory _name, uint256 _age){
        name = _name;
        age = _age;
    }
        
}

contract B{
    
  A instance = new A("Alice", 52);

}

위의 컨트랙트에서 볼 수 있듯이 A컨트랙트에는 contructor가 있다는 것을 알 수 있습니다.

생성자를 통해 파라미터를 받아 name과 age에 값을 넣어주고 있습니다.

 

그리고 B컨트랙트에 A를 인스턴스화 하는데 괄호안에 "Alice", 52가 있는 것을 알 수 있습니다. 이 말은 즉 A를 인스턴스화(생성하기 위해) 필요한 초기값이라고 생각하면 됩니다.

 

# 2. 생성자 활용!

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

contract A{
    
    string public name;
    uint256 public age;
    
    constructor(string memory _name, uint256 _age){
        name = _name;
        age = _age;
    }
        
    function change(string memory _name, uint256 _age) public  {
         name = _name;
         age = _age;
    }
}

contract B{
    
  A instance = new A("Alice", 52);
  
  function change(string memory _name, uint256 _age) public  {
        instance.change(_name,_age);
    }
  
  function get() public view returns(string memory, uint256) {
        return (instance.name(), instance.age());
    }

}

컨트랙트 B에 change함수와 get함수를 만들었습니다.

 

get함수는 여러개를 리턴하기 때문에 return 괄호문에 리턴하고자 하는 타입을 적어주었습니다.

위 컨트랙트에서는 name과 age를 리턴할 것이기 때문에 string과 uint256입니다.

 

또한 change를 보면 컨트랙트 A의 change를 통해 생성자에서 설정한 age, name을 변경함을 알 수 있습니다.

 

 

[참고]

https://dayone.tistory.com/m/10

'Solidity' 카테고리의 다른 글

[Instance 정의]  (0) 2023.05.01
[String 타입]  (0) 2023.04.29
[View와 Pure]  (0) 2023.04.27
[Solidity 접근제어자]  (0) 2023.04.15
[Function정의, 사용법?]  (0) 2023.04.15