728x90
인스턴스는 주로 하나의 컨트랙에서 다른 컨트랙을 접근할 때 쓰인다.
Ex) A 와 B 컨트랙이 있다고 가정
→ B에서 A의 함수나 변수들을 접근하여 사용하고 싶다면 A 인스턴스를 만들어 B 컨트랙 안에서 사용하면 됨
✅ 관련 예제
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract A{
uint256 public a = 5;
function change(uint256 _value) public {
a = _value;
}
}
contract B{
A instance = new A();
function get_A() public view returns(uint256) {
return instance.a();
}
function change_A(uint256 _value) public {
instance.change(_value);
}
}
위 예제에서 현재 B 컨트랙에서 A 컨트랙으로 접근하여 변수 a와 change 함수를 사용하려면 A를 B 컨트랙에서 인스턴스화하여 접근할 수 있다.
📌 인스턴스 설정 방법
컨트랙이름 인스터스의 이름 = new 컨트랙이름();
위 예제를 통해 더 유의해야할 점을 확인해보자.
get_A 에서는 컨트랙 A의 변수를 접근해야하니 instance.a()를 써주고, 변수를 접근할때는 () 를 붙여 리턴을 해줄 수 있다. change_A에서는 instance.change(_value) 로 해줌으로써, 컨트랙 A의 함수 change를 접근할걸 알 수가 있다.
한가지 더 유의할 점은 스마트컨트랙 A를 따로 배포하고, 인스턴스 A를 스마트컨트랙 B를 통해서 배포한다고 가정하였을때, 이 두개의 컨트랙은 완전히 다르다는 것이다.
따라서, instance를 만들어서 변수 a의 값을 변경한다해도, 스마트컨트랙 A 자체만 따로 배포한곳에는 값에 영향을 주지 않는다.
728x90
'Study > Blockchain & Solidity' 카테고리의 다른 글
[Solidity 깨부수기] 상속 (1) (0) | 2024.05.22 |
---|---|
[Solidity 깨부수기] Instance - constructor (0) | 2024.05.22 |
[Solidity 깨부수기] Function (0) | 2024.04.29 |
[Solidity 깨부수기] 기본 (1) | 2024.04.15 |
Solidity (0) | 2024.04.08 |