생성자(contstructor)는 컨트랙트가 생성 또는 배포, 그리고 인스턴스화 될 때, 초깃값을 설정해주는 용도로 사용됨.

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

contract A {
    string public name;
    uint256 public age;

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

contract B {
    A instance = new A("coolmarvel", 28);
}

A 컨트랙트에 constructor가 있으며. 이를 통해 파라미터를 받아 name과 age에 할당하고 있음.

B 컨트랙트에서 A를 인스턴스화 하고 생성자 인자로 “coolmarvel”, 28을 초기값으로 넘김.

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

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("coolmarvel", 28);

    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에 changeget 함수를 볼 수가 있는데,

먼저 get 함수에서는 여러 개를 리턴 하기에, returns에 타입을 여러 개 선언함.

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