2020.코딩일지

[solidity] 가시성지정자(public,external,private,internal)/view pure (feat.솔리디티깨부수기) 본문

Block Chain

[solidity] 가시성지정자(public,external,private,internal)/view pure (feat.솔리디티깨부수기)

개발하는라푼젤 2022. 11. 28. 23:07
728x90

1. 가시성지정자

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

//public: 모든 곳에서 접근가능
//external: 모든 곳에서 접근가능하나, external이 정의된 **자기자신 컨트랙 내에서 접근불가**
//private: 정의된 자기 컨트랙내에서만 가능(private정의된 컨드랙을 **상속받은 자식도 불가능)**
//internal: 정의된 자기 컨트랙네에서만 가능( 상속받은 자식 가능 !!)

contract lec3 {
    uint256 public a = 5;
    uint256 private a2 = 5;
}

contract Public_example {
    uint256 public a = 3;

    function changeA(uint256 _value) public {
        a = _value;
    }

    function get_a() view public returns (uint256) {
        return a;
    }
}

contract Public_example_2 {
    Public_example instance = new Public_example(); //인스턴스정의

    function changeA_2(uint256 _value) public {
        instance.changeA(_value);
    }
    function use_public_example_a() view public returns (uint256) {
        return instance.get_a();
    }
}

 

 

2. view와 pure

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

contract lec4 {
    /*
  view: 함수 밖의 변수를 읽을 수 있으나 변경 불가능
  pure: 함수 밖의 변수를 읽지도 못하고, 변경도 불가능 (내부에서만 사용할때)
  view와 pure 둘다 명시 안할때 : 함수밖의 변수들을 읽어서, 변경을 해야할 때 
  */
  
 
  uint256 public a = 1;
  //1. view
  function read_a() public view returns(uint256){
      return a+2; //함수밖의 변수 a를 불러와서 사용
  }

  //2. pure
  function read_a2() public pure returns(uint256) {
      uint256 b = 1;
      return 4+2+b; //pure기때문에 a를 못불러옴
  }

  //3. 둘다 명시 안할때 : 밖의 변수들을 읽어서, 변경해야하니까 명시를안함!...이건 가스소모됨;
  function read_a3() public returns(uint256) {
      a = 13;
      return a;
  }
}
Comments