반응형

생성자는 변수의 값을 초기화할 때 주로 사용한다.

스마트 컨트랙이 처음 생성되거나 인스턴스화될 때 이 초기 변수의 파라미터 값을 받고 생성된다.

→ 생성자는 어떠한 컨트랙을 인스턴스화할 때 초기값을 넣어주게 만드는 것

 

 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract A{
    
    string public name;
    uint256 public age;
    
    constructor(string memory _name, uint256 _age){
        name = _name;
        age = _age;
    }
        
}

contract B{
    
  A instance = new A("Alice", 52);

  function get() public view returns(string memory, uint256) {
        return (instance.name(), instance.age());
    }

}

construct를 정의해서 name과 age라는 변수의 값들을 입력해주는 것을 알 수 있다.

construct를 사용하기 위해 B에서 A를 인스턴스화를 시킨다.

get 함수는 name과 age를 리턴한다.

*function은 여러 개의 리턴 값을 반환할 수 있다.

 

 

B를 Deploy하면 위와 같은 결과를 얻을 수 있다.

 

 


다음으로 function을 통해 name과 age 값을 변경해본다.

 

 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

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

}

change라는 function을 contract A에 만들었다.

change는 name과 age 값을 변경하고, B에서 change 함수에 접근하도록 한다.

B의 change 함수는 인스턴스를 통해 name과 age 파라미터 값을 넣어 변경한다.

 

 

 

get을 누르면 이전과 같은 결과를 볼 수 있고

 

name을 Bob으로 age를 39로 변경하고

get을 누르면 값이 변경되는 것을 확인할 수 있다.

 

 

만약 A를 배포하려면 그냥 배포를 할 수 없고 먼저 name과 age를 먼저 지정해야 한다.

값을 지정하고 배포하면 변경된 것을 알 수 있고

 

B에서 배포한 결과는 여전히 Bob과 39인 것을 확인할 수 있다.

왜냐하면 A와 instance A는 완전히 다르기 때문이다.

 

이렇게 B 안에 A라는 스마트 컨트랙을 인스턴스화해서 접근하는 것은 가스가 많이 소비되기 때문에 비효율적이다.

한 블록당 가스를 소비할 수 있는 양이 제한적이다. → 제한된 양을 초과한다면 이더리움 자체 내에서 에러가 나고 스마트컨트랙을 아예 배포하지 못할 것이다.

이럴 경우 factory pattern을 사용하면 가스 소비량을 획기적으로 줄일 수 있다.

반응형

'PBL > 솔리디티' 카테고리의 다른 글

상속2 - overriding 오버라이딩  (0) 2024.05.28
상속1 - 정의  (0) 2024.05.22
instance 1 - 정의  (0) 2024.05.14
function 4 - String  (0) 2024.05.14
function 3 - View 와 Pure  (0) 2024.05.07