안녕하세요 오늘은 생성자 constructor를 설명하려 합니다.
생성자는, 스마트컨트랙이 생성 또는 배포, 그리고 인스턴스화 될때 초기값을 설정해주는 용도로 사용됩니다.
예시를 들자면,
// SPDX-License-Identifier:GPL-30
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("Alice", 52);
}
현재 저희는 A 컨트랙에 constructor 가 있음을 알 수가 있습니다.
생성자를 통해서 파라메터를 받아, name 과 age에 값을 넣어주고 있습니다.
그리고 B에 보니까, A를 인스터스화 하는데 괄호안에 "Alice" ,52 가 있는게 눈에 띄죠.
즉 이것은 A를 인스터스화 하기 위해서(생성하기 위해서), 필요한 초기 값인 것입니다.
좀더 나아가서,
// SPDX-License-Identifier:GPL-30
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("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 함수에서는 여러개의 리턴을 하기에, returns 괄호 부분에 리턴하고자 하는 타입을 써주었네요.
저희는 name과 age를 리턴할거니 string과 unit256입니다.
그리고 change를 보면, 컨트랙 A의 change를 통해서, 저희가 생성자에서 설정한 age , name 을 변경함을 알 수가 있어요.
영상을 꼭 참고 부탁드립니다.
영상에서 더 자세히 설명이 되어있어요.