상세 컨텐츠

본문 제목

솔리디티 강좌 8강 instance 1 - 정의

솔리디티 깨부수기 - 기본

by D_One 2021. 9. 3. 23:38

본문

 

 

안녕하세요 

오늘은 인스턴스(instance)에 대해서 알아 보도록하겠습니다.

인스턴스는 주로 하나의 컨트랙에서 다른 컨트랙을 접근할 때 쓰인답니다.

간단히 예를 들어 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{

}

예를 들어 저희는 현재 B 컨트랙에서  A 컨트랙에 접근하여, 변수 a 와 change 함수를 사용해보려고 합니다

 

그러면, 일단 A를 B컨트랙에서 인스턴스화 해야 접근이 가능하겠죠?

 

contract B{
    
    A instance = new A();
    
  }

인스터스는 위오 같이 하시면 됩니다.

 

컨트랙이름  인스터스의 이름 = new  컨트랙이름();

 

이런식으로 간단하게 인스턴스를 정의가 가능해요.

 

인제 인스터스를 이용해 접근해야하는데 접근할때는 . 을 붙여서 이동한답니다.

예를들어서, instance.change(_value) 할 수 있습니다.

 

밑에를 보시면,

 

// 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 의 instance 는 . 붙여 접근함을 볼 수가 있어요.

 

get_A 에서는 컨트랙 A의 변수를 접근해야하니 instance.a()를 써준걸 알 수가 있어요.

그리고 한가지더, 변수를 접근할때는 () 를 붙여 주셔야 리턴이 된답니다.

 

change_A에서는 instance.change(_value) 로 해줌으로써, 컨트랙 A의 함수 change를 접근할걸 알 수가 있습니다.

 

 

한가지 더 유의 하실 점은 instance 는 A 스마트 컨트랙의 분신과 같은 존재입니다.

즉 스마트컨트랙 A를 따로 배포하고, 인스턴스 A를 스마트컨트랙 B를 통해서 배포한다고 가정하였을때, 

이 두개의 컨트랙은 완전히 다르답니다. 

 

그렇기 때문에, instance를 만들어서 변수 a의 값을 변경한다해도, 스마트컨트랙 A 자체만 따로 배포한곳에는 값에 영향을 주지가 않아요. 

영상을 보시면 자세히 설명이 되어있습니다.

관련글 더보기