본문 바로가기

study/BlockChain

접근 제어자

728x90

external

1. 외부 컨트랙만 호출 가능.

2. 상태 변수는 external 사용불가.

 

pragma solidity ^0.4.23;

contract Mycontract{
	uint external count; //상태변수. 이것도 에러남.
    
    constructor() public {
    	//...
    }
    
    function numOfStudent(address_teacher) public view return(uint) {
    	test(); //에러남. 밑의 external붙은 함수를 같은 컨트랙내부에 있는 함수에서 호출했기 때문.
    }
    
    function test() external {
    	//...
    }
}    

contract YourContract {
	MyContract myContract;
    
    function callTest() public {
    	myContract.test(); //이건 오류 없다! 외부컨트랙에서만 호출이 가능하기 때문에.
    }
} 

internal

1. 컨트랙 내부 호출 가능

2. 상속받은 컨트랙도 호출 가능

3. 상태변수는 디폴트로 internal 선언

 

pragma solidity ^0.4.23;

contract Mycontract{
	uint count; //상태변수 internal선언 되어있음. 
    
    constructor() public { //생성자
    	//...
    }
    
    function numOfStudent(address_teacher) public view return(uint) {
    	test(); //오류 없음. 내부함수 호출 가능
    }
    
    function test() internal {
    	//...
    }
}    

contract YourContract is MyContract {
    function callTest() public {
    	test(); //오류 없음. 상속받은 컨트랙에서도 호출 가능
    }
} 

 

public

1. 컨트랙 내부 호출 가능

2. 상속받은 컨트랙도 호출 가능

3. 외부 컨트랙도 호출 가능

 

pragma solidity ^0.4.23;

contract Mycontract{
	uint public count; //상태변수
    
    constructor() public { //생성자
    	//...
    }
    
    function numOfStudent(address_teacher) public view return(uint) {
    	test(); // 오류없음
    }
    
    function test() public { //public안붙여도 디폴트지만, 안붙이면 오류메세지 뜬다..
    	//...
    }
}    

contract YourContract is MyContract {    
    function callTest() public {
    	test(); //오류없음
    }
} 

contract HisContract {
	MyContract myContract;
    
    function callTest() public {
    	myContract.test(); //오류없음 
    }
}

 

private

1. 컨트랙 내부만 호출가능

 

pragma solidity ^0.4.23;

contract Mycontract{
	uint public count; //상태변수.
    
    constructor() public {
    	//...
    }
    
    function numOfStudent(address_teacher) public view returns(uint) {
    	test(); //오류없음.
    }
    
    function test() private {
    	//...
    }
}    

contract YourContract is MyContract { //상속받은 곳 호출 에러
    function callTest() public {
		test();
    }
}

contract HisContract {
	MyContract myContract;
    
    function callTest() public {
    	myContract.test();  //여기도 에러
    }
}

 

728x90
반응형

'study > BlockChain' 카테고리의 다른 글

값 타입  (2) 2019.10.05
함수 타입 제어자  (2) 2019.10.05
컨트랙의 구조  (3) 2019.10.05
nodestart.cmd /DAG파일 생성  (0) 2019.10.05
genesis block  (4) 2019.10.05