Solidity 문법 - (9) Contract 생성자 함수

2023. 5. 29. 19:16BlockChain/Solidity 깨부수기 ( 유투브 강의 )

목차
1. Contract 생성자 함수
2. Contract 생성자 함수 예제 코드

 

1. Contract 생성자 함수

 

 

생성자 함수, constructor는 인스턴스를 생성하면서 변수에 값을 넣어줄 경우에 사용한다.

 

스마트 컨트랙트를 생성할 때, 인자를 넣어 주어야한다.

 

 

생성자 함수는 컴파일 단계에서는 실행되지 않고, 컴파일이 정상적으로 된다.

 

컴파일된 파일을 EVM에 배포할 시점에 생성자 함수가 실행된다.

 

따라서 EVM에 배포할 때 생성자 함수의 인자값을 넣어주어야 한다.

 

 

 

2. Contract 생성자 함수 예제 코드

 

 

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

contract InstanceD {
    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 InstanceE {
    InstanceD instance = new InstanceD("Char1ey", 29);

    function get() public view returns (string memory, uint256) {
        return (instance.name(), instance.age());
    }

    function change(string memory _name, uint256 _age) public {
        instance.change(_name, _age);
    }
}

 

const InstanceD = artifacts.require("InstanceD")
const InstanceE = artifacts.require("InstanceE")

module.exports = (deployer) => {
  deployer.deploy(InstanceD, "Char1ey", 30)
  deployer.deploy(InstanceE)
};

 

위와 같이 배포시에 생성자 함수의 인자를 넣어주고,

 

 

truffle console을 이용하여 InstanceD는 변수 d에 담고, InstanceE는 변수 e에 담아 각 메서드들을 실행했다.

 

당연히 d와 e에서의 값들은 모양은 같지만, 다른 개체이기 떄문에 서로 간섭하지 않는다.

 

 

생성된 d의 name은 배포시 넣어준 Char1ey를 담고있다.

 

 

e도 마찬가지로 Char1ey를 담고 있으나, change를 통해서 값을 변경하였고,

 

e.get()을 이용해 출력했을 때 변경된 것을 확인할 수 있다.

 

그리고 d의 값을 출력했을 때 바뀌지 않았음을 확인할 수 있다.