2023. 5. 29. 18:22ㆍBlockChain/Solidity 깨부수기 ( 유투브 강의 )
목차 |
1. 인스턴스의 생성과 사용 |
2. 인스턴스의 생성과 사용 예제 코드 |
1. 인스턴스의 생성과 사용
솔리디티에서는 다른 컨트랙트에 정의된 것들을 사용하기 위해서
인스턴스를 생성하여 사용한다.
즉, 하나의 컨트랙트에서 다른 컨트래그에 접근하기 위해서 인스턴스를 사용한다.
컨트랙트에서 인스턴스를 생성하는법은 다음과 같은 문법을 이용한다.
[사용할 컨트랙트 명] [ 생성할 인스턴스 명(변수명) ] = new [사용할 컨트랙트 명]( ) ;
2. 인스턴스의 생성과 사용 예제 코드
아래의 코드는 정의된 컨트랙트 InstanceA를 다른 컨트랙트인 InstanceB에서 접근하기 위해서,
인스턴스를 생성해서 사용하는 코드이다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract InstanceA {
uint256 public num = 29;
function change(uint256 _value) public {
num = _value;
}
}
contract InstanceB {
InstanceA instance = new InstanceA();
function getNum() public view returns (uint256) {
return instance.num();
}
function changeNum(uint256 _value) public {
instance.change(_value);
}
}
InstanceA와 InstanceB를 배포하고,
InstanceB에서 InstanceA에 접근하는 함수 getNum과 changeNum을 이용해서
InstanceA에 선언된 값을 출력해보자.
truffle console을 이용하여 instance에 InstanceB를 담은후에,
getNum()을 통해서 instanceA의 변수에 접근한 것을 볼 수 있다.
다음은 changeNum을 이용해 값을 변경하고 다시 getNum()을 통해서 값을 출력해보자.
인스턴스를 통해서 변수 a에 접근한 것을 확인할 수 있다.
만약 InstanceA와 다른 두 개의 컨트랙트에서 인스턴스를 생성한다면 값을 공유할까? 라는 궁금증이 생길 수 있다.
인스턴스는 생성할 때마다 서로 모양은 같지만 다른 개체이므로 값을 공유하지 않는다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract InstanceA {
uint256 public num = 29;
function change(uint256 _value) public {
num = _value;
}
}
contract InstanceB {
InstanceA instance = new InstanceA();
function getNum() public view returns (uint256) {
return instance.num();
}
function changeNum(uint256 _value) public {
instance.change(_value);
}
}
contract InstanceC {
InstanceA instance = new InstanceA();
function getNum() public view returns (uint256) {
return instance.num();
}
function changeNum(uint256 _value) public {
instance.change(_value);
}
}
위의 코드에서 InstanceB와 InstanceC를 각각 a와 b 변수에 인스턴스를 생성하여 담고,
a에서 changeNum()을 사용하여 값을 변경하면 a.getNum()에서는 변경된 값을
b에서 getNum()을 사용하면 InstanceA에 선언되어 있는 초깃값을 출력한다.
'BlockChain > Solidity 깨부수기 ( 유투브 강의 )' 카테고리의 다른 글
Solidity 문법 - (10) 상속과 오버라이딩 (0) | 2023.05.30 |
---|---|
Solidity 문법 - (9) Contract 생성자 함수 (0) | 2023.05.29 |
Solidity 문법 - (7) 저장방식 (0) | 2023.05.29 |
Solidity 문법 - (6) view와 pure (0) | 2023.05.29 |
Solidity 문법 - (5) 접근 제한자 (0) | 2023.05.29 |