블록체인 (Block Chain)/이더리움

[솔리디티 입문] 5. 함수

2023. 6. 16. 15:36
목차
  1. 함수 선언
  2. 함수의 가시성
  3. 함수의 상태 변경 가능성
  4. 함수 호출
  5. 생성자 (Constructor)
  6. 폴백 (Fallback) 및 리시브 (Receive) 함수
728x90
반응형
SMALL

솔리디티 스마트 컨트랙트에서 함수는 컨트랙트의 기능을 구현하는 데 사용되는 코드 블록입니다. 함수는 특정 작업을 수행하거나 계산을 수행한 후 값을 반환할 수 있습니다. 이 글에서는 솔리디티에서 함수를 작성하고 사용하는 방법에 대해 알아봅시다.

함수 선언

솔리디티 함수는 function 키워드를 사용하여 선언하며, 매개변수와 반환 타입을 지정할 수 있습니다. 함수의 가시성 및 상태 변경 가능성도 지정해야 합니다.

pragma solidity ^0.8.0;

contract FunctionExample {
    function greet(string memory name) public pure returns (string memory) {
        return string(abi.encodePacked("Hello, ", name));
    }
}

함수의 가시성

함수의 가시성은 함수를 호출할 수 있는 주체를 제한하는 데 사용됩니다. 솔리디티에서는 public, external, internal, private 네 가지 가시성을 사용할 수 있습니다.

  • public: 컨트랙트 내부 및 외부에서 호출할 수 있습니다.
  • external: 컨트랙트 외부에서만 호출할 수 있습니다.
  • internal: 컨트랙트 내부 및 상속된 컨트랙트에서 호출할 수 있습니다.
  • private: 함수가 선언된 컨트랙트 내부에서만 호출할 수 있습니다.

함수의 상태 변경 가능성

함수는 pure, view, payable, non-payable 중 하나의 상태 변경 가능성을 지정해야 합니다.

  • pure: 함수가 컨트랙트의 상태를 읽거나 변경하지 않습니다.
  • view: 함수가 컨트랙트의 상태를 읽을 수 있지만 변경할 수 없습니다.
  • payable: 함수가 Ether를 전송받을 수 있습니다.
  • non-payable (기본값): 함수가 Ether를 전송받지 못하며 상태를 변경할 수 있습니다.
pragma solidity ^0.8.0;

contract FunctionModifiersExample {
    uint public value;

    function getValue() public view returns (uint) {
        return value;
    }

    function setValue(uint _value) public {
        value = _value;
    }

    function deposit() public payable {
        require(msg.value > 0, "Value must be greater than 0.");
    }
}

함수 호출

함수는 컨트랙트 내부에서 다른 함수를 호출할 수 있습니다. 이 때 함수 호출에 필요한 인자를 전달해야 합니다.

pragma solidity ^0.8.0;

contract FunctionCallsExample {
    function add(uint a, uint b) public pure returns (uint) {
        return a + b;
    }

    function addAndDouble(uint a, uint b) public pure returns (uint) {
        uint sum = add(a, b);
        return sum * 2;
    }
}

생성자 (Constructor)

생성자는 컨트랙트가 배포될 때 호출되는 특수한 함수입니다. 생성자는 컨트랙트의 초기 상태를 설정하는 데 사용됩니다. 생성자는 constructor 키워드를 사용하여 선언하며, 가시성을 지정할 수 있습니다.

pragma solidity ^0.8.0;

contract ConstructorExample {
    address public owner;

    constructor() {
        owner = msg.sender;
    }
}

폴백 (Fallback) 및 리시브 (Receive) 함수

폴백 함수는 컨트랙트에 대한 함수가 지정되지 않은 호출이 발생할 때 실행되는 기본 함수입니다. 리시브 함수는 컨트랙트가 Ether를 받을 때 호출되는 함수입니다. 두 함수 모두 한 컨트랙트에서 한 번만 정의될 수 있습니다.

pragma solidity ^0.8.0;

contract FallbackAndReceiveExample {
    fallback() external payable {
        // Fallback 함수 로직
    }

    receive() external payable {
        // 리시브 함수 로직
    }
}
728x90
반응형
LIST

'블록체인 (Block Chain) > 이더리움' 카테고리의 다른 글

[솔리디티 입문] 7. 변수 선언, 초기화 및 할당  (0) 2023.06.16
[솔리디티 입문] 6. 함수 제어자  (0) 2023.06.16
[솔리디티 입문] 4. 상태 변수  (0) 2023.06.16
[솔리디티 입문] 3. 글로벌 네임스페이스  (0) 2023.06.16
[솔리디티 입문] 2. 참조형(reference type)  (0) 2023.06.16
  1. 함수 선언
  2. 함수의 가시성
  3. 함수의 상태 변경 가능성
  4. 함수 호출
  5. 생성자 (Constructor)
  6. 폴백 (Fallback) 및 리시브 (Receive) 함수
'블록체인 (Block Chain)/이더리움' 카테고리의 다른 글
  • [솔리디티 입문] 7. 변수 선언, 초기화 및 할당
  • [솔리디티 입문] 6. 함수 제어자
  • [솔리디티 입문] 4. 상태 변수
  • [솔리디티 입문] 3. 글로벌 네임스페이스
gsroot
gsroot
gsrootgsroot 님의 블로그입니다.
gsroot
gsroot
gsroot
전체
오늘
어제
  • 분류 전체보기 (126)
    • 파이썬 (Python) (3)
    • 데이터 과학 (Data Science) (29)
      • 데이터브릭스 (11)
      • Apache Superset (9)
    • 인공지능 (AI) (43)
      • 머신러닝 (ML) (19)
      • LLM (8)
      • MCP (8)
      • OpenAI Agents SDK (7)
    • 블록체인 (Block Chain) (37)
      • 이더리움 (36)
      • 코스모스 (0)
    • 웹 (Web) 개발 (9)
    • 앱 (App) 개발 (0)
    • 데브옵스 (DevOps) (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 선형회귀
  • Superset
  • 이더리움
  • 데이터브릭스
  • openai agents sdk
  • 자동화
  • 머신러닝
  • claude
  • Ai
  • MCP
  • cursor
  • cognosys
  • Python
  • redis
  • 솔리디티
  • ci/cd
  • FastAPI
  • Redis Sentinel
  • 스마트컨트랙트
  • GPT
  • 브라우니
  • 데이터 시각화
  • 파이썬
  • 블록체인
  • 웹 개발
  • 자연어 처리
  • DevOps
  • 데이터 과학
  • LLM
  • NLP

최근 댓글

최근 글

반응형
250x250
hELLO · Designed By 정상우.
gsroot
[솔리디티 입문] 5. 함수
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.