Solidity 솔리디티 강좌 8강 : instance의 정의

flowing1ife·2023년 7월 7일
0

[ Solidity 깨부수기 ]

목록 보기
8/29
post-thumbnail

Solidity 솔리디티 강좌 8강 : instance의 정의
이번엔 solidity의 instance에 대해 알아보도록 하자.


instance의 정의

📌 Solidity

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 컨트랙트는 같은 것이 아니다.


출처 및 참고 자료

profile
👩🏻‍💻 Backend Engineer, Contract Developer

0개의 댓글