728x90
Instance와 Constructor
constructor 생성자는 변수의 값을 초기화할 때 쓰인다. 즉, smart contract가 처음 생성(배포) 또는 인스턴스화 될 때, 초기 변수의 인자값을 받고 smart contract가 생성된다.
// SPDX-License-Identifier: GPL-3.0
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);
function get() public view returns(string memory, uint256){
return (instance.name(), instance.age());
}
}
- A 컨트랙트를 보면 constructor 생성자로 _name과 _age를 초기 변수의 인자로 받아 name 과 age 변수에 저장되는 것을 알 수 있다.
- B 컨트랙트에서는 "Alice", 52를 초기 변수의 인자로 주어 A 컨트랙트를 인스턴스화 했다. get 함수는 인스턴스의 name 변수와 age 변수를 return 한다
위 코드를 실행하면 아래와 같은 결과 화면을 볼 수 있다.
▶ 즉, B 컨트랙트를 배포한 후 get 함수를 호출해보면 초기 변수의 인자로 준 값인 "Alice", 52가 return 되는 것을 볼 수 있다.
// SPDX-License-Identifier: GPL-3.0
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());
}
}
→ A와 B 컨트랙트에 각각 change 함수를 추가했다.
- A 컨트랙트의 change 함수는 말 그대로 변수 name 과 age의 값을 변경하는 함수.
- B 컨트랙트의 change 함수에서는 2개의 인자값을 받아 인스턴스의 change 함수를 실행.
아래와 같이 B 컨트랙트의 change 함수를 실행하였을 때, 값이 잘 바뀐 것을 확인할 수 있다.
A의 경우, 배포 시 constructor 생성자가 존재하므로 배포할 때, constructor를 지정해주어야 함을 확인할 수 있다.
728x90
'Study > Blockchain & Solidity' 카테고리의 다른 글
[Solidity 깨부수기] 상속 & 이벤트 (2) (0) | 2024.06.05 |
---|---|
[Solidity 깨부수기] 상속 (1) (0) | 2024.05.22 |
[Solidity 깨부수기] Instance 정의 (0) | 2024.05.15 |
[Solidity 깨부수기] Function (0) | 2024.04.29 |
[Solidity 깨부수기] 기본 (1) | 2024.04.15 |