WebDevLee 2022. 12. 28. 16:41

Solidity의 Instance에 대해 정리하였습니다.

 

 


< Instance >

Instance란 한 스마트 컨트랙트의 인스턴스(분신)를 말합니다.

Instance는 한 스마트 컨트랙트에서 다른 스마트 컨트랙트에 접근하기 위해 사용됩니다.
But, Instance는 한 스마트 컨트랙트 전부를 가져오는 것이기 때문에 Gas가 많이 소비되어 비추천하는 방식임.

 

  • 인스턴스 생성 방법
new 인스턴스이름();

 

 

Ex) B 컨트랙트에서 A컨트랙트 함수에 접근

// 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);
  }
}

 

 


< Constructor >

constructor는 Instance의 초기값 세팅을 위해 사용됩니다.

 

Ex)

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 (instane.name(), instance.age());
  } 
}