Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

솔리디티 - 02. 기본 문법 2 (함수) 본문

💬 언어/Solidity

솔리디티 - 02. 기본 문법 2 (함수)

Chamming2 2021. 4. 15. 23:42

1. 함수

솔리디티에서는 function 키워드를 활용해 함수를 만들 수 있습니다.

(솔리디티는 ECMAScript, 즉 자바스크립트 문법을 기반으로 설계되었다고 하는데, 아마 그 흔적 중 일부가 아닐까 싶습니다.)

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10
    
    struct Zombie {
    	string name;
        uint dna;
    }
    
    Zombie[5] public zombies; 
    
    function createZombie(string _name, uint _dna) {
    
    }
}

함수의 접근자 지정하기 1 : private & public

함수에는 private & public 속성의 접근자를 지정할 수가 있습니다.

  • 함수는 기본적으로 public  속성으로 선언됩니다.
  • private 을 붙이면 컨트랙트의 외부에서는 함수를 호출할 수 없습니다.
  • 접근 지정자는 매개변수 바로 다음에 지정합니다.
pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10 // b는 16의 10승
    
    struct Zombie {
    	string name;
        uint dna;
    }
    
    Zombie[5] public zombies;
    
    // private 속성의 함수는 다른 컨트랙트에서 활용할 수 없습니다.
    function createZombie(string _name, uint _dna) private {
    
    }
}

함수의 접근자 지정하기 2 : internal & external

솔리디티에는 public private 이외에도 internal external이라는 함수 접근 제어자가 존재합니다.

  • internal : private과 유사하나, 상속을 받은 컨트랙트(자식 컨트랙트)에서는 함수를 사용할 수 있게 합니다.
  • external : external을 붙인 함수는 컨트랙트의 외부에서만 호출될 수 있습니다.
contract Sandwich {
  uint private sandwichesEaten = 0;

  function eat() internal {
    sandwichesEaten++;
  }
}

contract BLT is Sandwich {
  uint private baconSandwichesEaten = 0;

  function eatWithBacon() public returns (string) {
    baconSandwichesEaten++;
    // eat 함수가 internal로 선언되었기 때문에 자식 컨트랙트에서 호출이 가능합니다.
    eat();
  }
}

함수의 반환값 지정하기

함수가 반환하는 타입(자료형)은 returns 라는 키워드를 통해 명시적으로 드러나야 합니다.

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10
    
    struct Zombie {
    	string name;
        uint dna;
    }
    
    Zombie[5] public zombies; 
    
    // returns (string)을 통해 이 함수가 문자열을 리턴함을 알 수 있습니다.
    function createZombie(string _name, uint _dna) public returns (string) {
    	return "create";
    }
}

함수 제어자 지정하기

컨트랙트의 변수를 읽고 쓰는지 여부에 따라 제어자를 지정합니다.

  • view : 컨트랙트의 변수를 읽기만 할 때 (상태를 변화시키지 않을때)
  • pure : 컨트랙트의 변수를 읽지도, 쓰지도 않을 때

제어자는 리턴 타입과 접근자 사이에 위치하게 됩니다.

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10
    
    struct Zombie {
    	string name;
        uint dna;
    }
    
    Zombie[5] public zombies; 
    
    function createZombie(string _name, uint _dna) public returns (string) {
    	return "create";
    }
    
    // 어떤 변수도 활용하지 않으므로 pure 제어자를 활용한 모습입니다.
    function _generateRandomDna(string _str) private pure returns (string) {
    
    }
}

require 키워드

require 는 조건이 참이면 함수를 실행하고, 참이 아니면 함수를 실행하지 않고 에러를 출력합니다.

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint a = 16;
    uint b = a ** 10
    
    struct Zombie {
    	string name;
        uint dna;
    }
    
    Zombie[5] public zombies; 
    
    function createZombie(string _name, uint _dna) public returns (string) {
        // _name이 "찬민" 일 경우에만 함수를 실행합니다.
    	require(_name == "찬민");
    	return "create";
    }
}

값의 반환

솔리디티의 함수는 값을 반환하되, 한번에 여러 값을 반환할 수 있습니다.

function multipleReturn() public pure returns (
  uint a;
  uint b;
  uint c;
) {
  return (10, 20, 30);
}

// 세 번째 리턴값만을 추출하고자 할 경우
uint number;
(, , number) = multipleReturn(); // number: 30

 

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆