-
FunctionBlock-Chain/Solidity 2022. 12. 26. 15:07
Solidity의 함수에 대해 정리하였습니다.
< funtion 정의 방법 >
function 이름 () public { // 함수 내용 }
Ex) Parameter 와 return값에 따른 함수 정의
// 1. Parameter와 Return값이 없는 function function changeA1() public { a = 5; } // 2. Parameter는 있지만, Return값이 없는 function function changeA2(uint256 _value) public { a = _value; } // 3. Parameter와 Return값이 있는 function function changeA3(uint256 _value) public returns(uint256) { a = _value; return a; }
< 접근제한자 >
해당 변수(함수)의 접근 범위 설정을 위해 사용됩니다.
- public : 모든 곳에서 접근 가능
- external : public처럼 모든 곳에서 접근 가능하나, external이 정의된 자기자신 컨트랙 내에서는 접근 불가
- private : 오직 private이 정의된 자기 컨트랙에서만 가능(private이 정의된 컨트랙을 상속 받은 자식도 불가능)
- internal : private처럼 오직 internal이 정의된 자기 컨트랙과, internal이 정의된 컨트랙을 상속받은 자식만 접근 가능
< View 와 Pure >
해당 함수의 변수 접근 권한 설정을 위해 사용됩니다.
- 명시 X : function 밖의 변수들을 읽을 수 있고 변경도 가능
- pure : function 밖의 변수들을 읽지 못하고, 변경도 불가능
- view : function 밖의 변수들을 읽을 수 있으나 변경 불가능
Ex)
uint256 public a = 1; function read_a() public view returns(uint256) { return a+2; } function read_a2() public pure returns(uint256) { uint256 b = 1; return b+2; } function read_a3() public returns(uint256) { a = 13; return a; }
< String >
함수에서 string 사용시 memory 키워드를 붙여주어야 합니다.
solidity의 4가지 영역
- storage : 대부분의 전역변수 및 함수들이 저장되며, 영속적으로 저장되어 가스 비용이 비쌈.
- memory : 함수의 파라미터, 함수 내 변수, 리턴값, 레퍼런스 타입이 주로 저장됨.(영속적이지 않아 가스 비용이 쌈)
- calldata : 주로 external function의 파라미터에서 사용됨.
- stack : EVM (Ethereum Virtual Machine) 에서 stack data를 관리할 때 쓰는 영역.(1024mb 로 제한)
Ex) string 형식을 파라미터로 갖는 함수
function get_string(string memory _str) public pure returns(string memory) { return _str; } function get_uint(uint256 _ui) public pure returns(uint256 memory) { return _ui; }
: uint와 같이 기본 데이터 타입은 memory 키워드 생략 가능
'Block-Chain > Solidity' 카테고리의 다른 글
조건문 & 반복문 (0) 2023.02.15 Mapping & Array & struct(구조체) (0) 2023.01.16 상속 & 이벤트 (0) 2023.01.05 Instance (0) 2022.12.28 Solidity란 & 기본 개념 (0) 2022.12.23