상세 컨텐츠

본문 제목

Solidity - Visibility

Programming Language/Solidity

by Yongari 2023. 1. 4. 22:29

본문

 

 

Visibility
가시성

Functions and state variables have to declare whether they are accessible by other contracts.
함수와 상태 변수는 다른 계약에 의해 접근 가능한지 여부를 선언해야 한다.

Functions can be declared as
함수는 다음과 같이 선언할 수 있습니다

  • public - any contract and account can call
    공개 - 모든 계약 및 계정이 호출할 수 있습니다
  • private - only inside the contract that defines the function
    비공개 - 기능을 정의하는 계약 내에서만 가능
  • internal- only inside contract that inherits an internal function
    내부 기능을 상속하는 내부 전용 내부 계약
  • external - only other contracts and accounts can call
    외부 - 다른 계약 및 계정만 호출할 수 있습니다

State variables can be declared as public, private, or internal but not external.
상태 변수는 공개 변수, 비공개 변수 또는 내부 변수로 선언할 수 있지만 외부 변수는 선언할 수 없습니다.

 
 
 
 
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Base {
    // Private function can only be called
    // - inside this contract
    // Contracts that inherit this contract cannot call this function.
    // Private 함수만 호출할 수 있습니다
    // - 본 계약 내에서
    // 이 계약을 상속하는 계약은 이 기능을 호출할 수 없습니다.
    function privateFunc() private pure returns (string memory) {
        return "private function called";
    }

    function testPrivateFunc() public pure returns (string memory) {
        return privateFunc();
    }

    // Internal function can be called
    // - inside this contract
    // - inside contracts that inherit this contract
    // 내부 함수를 호출할 수 있습니다
    // - 본 계약 내에서
    // - 이 계약을 상속하는 내부 계약
    function internalFunc() internal pure returns (string memory) {
        return "internal function called";
    }

    function testInternalFunc() public pure virtual returns (string memory) {
        return internalFunc();
    }

    // Public functions can be called
    // - inside this contract
    // - inside contracts that inherit this contract
    // - by other contracts and accounts
    // 공개 기능을 호출할 수 있습니다
    // - 본 계약 내에서
    // - 이 계약을 상속하는 내부 계약
    // - 다른 계약 및 계정에 의해
    function publicFunc() public pure returns (string memory) {
        return "public function called";
    }

    // External functions can only be called - by other contracts and accounts
	// 외부 기능은 다른 계약 및 계정에서만 호출할 수 있습니다
    function externalFunc() external pure returns (string memory) {
        return "external function called";
    }

    // This function will not compile since we're trying to call an external function here.
    // 여기서 외부 함수를 호출하려고 하므로 이 함수가 컴파일되지 않습니다.
    // function testExternalFunc() public pure returns (string memory) {
    //     return externalFunc();
    // }

    // State variables
    string private privateVar = "my private variable";
    string internal internalVar = "my internal variable";
    string public publicVar = "my public variable";
    // State variables cannot be external so this code won't compile.
    // string external externalVar = "my external variable";
    // 상태 변수는 외부 변수일 수 없으므로 이 코드는 컴파일되지 않습니다.

}

contract Child is Base {
    // Inherited contracts do not have access to private functions
    // and state variables.
    // 상속된 계약은 private function 및 상태 변수에 액세스할 수 없습니다.
    // function testPrivateFunc() public pure returns (string memory) {
    //     return privateFunc();
    // }

    // Internal function call be called inside child contracts.
    // 내부 함수 호출은 자식 계약 내에서 호출됩니다.
    function testInternalFunc() public pure override returns (string memory) {
        return internalFunc();
    }
}
 
 
 
 
 
 
 
 
 
 
 
 
 

Try on Remix

'Programming Language > Solidity' 카테고리의 다른 글

Solidity - Fallback  (0) 2023.01.13
Solidity - Interface  (0) 2023.01.05
Solidity - Calling Parent Contracts  (0) 2023.01.04
Solidity - Shadowing Inherited State Variables  (0) 2022.12.31
Solidity - Inheritance  (0) 2022.12.30

관련글 더보기