Solidity 솔리디티 강좌 8강 : instance의 정의
이번엔 solidity의 instance에 대해 알아보도록 하자.
instance란?
하나의 contract에서 다른 contract을 접근할 때 사용
// SPDX-License-Identifier: GPL-3.0
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);
}
}
현재 A
컨트랙트에는 5의 값을 지닌 변수 a
와 변수 a
의 값을 인자로 받아온 값으로 변경해주는 함수 change
가 존재한다.
B
컨트랙트에서 A
컨트랙트의 인스턴스를 생성했다. 이처럼 인스턴스를 생성할 때에는 생성하고자 하는 컨트랙트명 인스턴스 이름 = new 생성하고자 하는 컨트랙트명 ();
순으로 작성해 생성한다.
함수 get_A
는 인스턴스의 변수 a
를 return 한다. 이처럼 인스턴스의 변수를 불러올 때에는 꼭 뒤에 괄호를 붙여주어야 한다.
함수 change_A
는 인자를 받아 인스턴스의 함수 change
를 실행한다.
👉 결과
이처럼 B
컨트랙트를 배포한 후, get_A
함수를 호출하면 A
컨트랙트의 변수 a
의 값인 5가 return 된다.
이후 change_A
함수에 인자값 3을 넣고 호출한 후 다시 get_A
를 호출하면 인스턴스의 변수 a
의 값이 3으로 변경된 것을 알 수 있다.
📍 주의할 점
A
컨트랙트를 배포한 후, change
함수를 통해 변수 a
의 값을 42로 변경 시켰다. 그리고 나서 다시 B
컨트랙트의 get_A
함수를 호출했을 때, 42를 return 하지 않고 3을 return 한다. 이는 instance는 A
컨트랙트 자체를 가리키는 것이 아닌 A
컨트랙트의 분신을 하나 생성해서 가져온 것이기 때문이다. 따라서 생성된 instance와 A
컨트랙트는 같은 것이 아니다.
출처 및 참고 자료