관리 메뉴

평행우주 : world 1

[Solidity] 컨트랙트 정의와 함수 본문

텃밭 1 : BlockChain/Solidity

[Solidity] 컨트랙트 정의와 함수

parallelworlds 2022. 3. 28. 01:52

 

 

컨트랙트 정의

솔리디티의 주요 데이터 타입은 contract이다

객체지향 언어의 객체와 마찬가지로,

컨트랙트는 데이터와 메서드가 포함된 컨테이너다

솔리디티는 컨트랙트와 유사한 두 가지 객체 유형을 제공한다

 

interface

인터페이스 정의는 함수가 정의되어 있지 않고 선언만 되어 있다는 것을 제외하면,

컨트랙트와 완전히 같은 구조로 되어 있다

이런 유형의 선언은 흔히 stub이라고 불린다

어떤 구현도 없이 함수의 인자와 반환 유형을 알려준다

인터페이스는 컨트랙트의 형태를 지정한다

상속될 때 인터페이스에 의해 선언된 각 함수는 자식에 의해 정의되어야 한다

 

 

library

라이브러리 컨트랙트는 delegatecall 메서드를 참고하여

한 번만 배포되고 다른 컨트랙트에서 사용되기 위한 컨트랙트이다

 

 

 

 


함수

컨트랙트 내에서 EOA 트랜잭션이나 또 다른 컨트랙트에 의해 호출될 수 있는 함수 정의

솔리디티에서 함수를 선언할 때 사용하는 구문은 다음과 같다

function FuntionName([parameters]) {public | private | internal | external}
[pure | constant | view | payable] [modifiers] [returns (return types)]

 

FunctionName

트랜잭션 (EOA로부터), 다른 컨트랙트 또는 동일한 컨트랙트 내에서 함수를 호출하는 데 사용되는 함수의 이름

각 컨트랙트마다 한 개의 함수는 이름이 없이 정의될 수 있는데,

그것을 폴백 함수라고 부르고 다른 함수 이름이 없을 때 호출된다

폴백함수는 인수가 없으며 아무것도 반환할 수 없다

 

parameters

이름 뒤에 함수 이름과 유형과 함께 전달되어야 하는 인수를 지정한다

 

 

다음 키워드들은 함수의 가시성을 지정한다

* 컨트랙트 내의 모든 함수 또는 데이터는 공개 블록체인에서 항상 볼 수 있다

즉 누구나 코드 또는 데이터를 볼 수 있다

여기서 설명된 키워드는 함수를 호출할 수 있는 방법과 조건에만 영향을 준다

 

public

공개 함수는 기본값이다

공개함수는 다른 컨트랙트 또는 EOA 트랜잭션 또는 컨트랙트 내에서 호출할 수 있다

 

external

외부함수는 명시적으로 키워드 this가 앞에 붙지 않는 한,

컨트랙트 내에서 호출할 수 없다는 점을 제외하면 공개함수와 같다

 

internal

내부함수는 컨트랙트 내에서만 접근할 수 있다

다른 컨트랙트 또는 EOA트랜잭션으로는 호출할 수 없다

파생괸 컨트랙트(이 컨트랙트를 상속받은 컨트랙트)에 의해서는 호출될 수 있다

 

 

private

비공개 함수는 내부 함수와 유사하지만 파생된 컨트랙트에서도 호출할 수 없다

 

 

 

다음 키워드들은 함수의 동작에 영향을 준다

 

 

constant 또는 view

뷰로 표시된 함수는 상태를 변경하지 않는다

상수라는 용어는 향후 릴리스에서 사용되지 않는 뷰의 별칭이다

현재 컴파일러는 view 변경자를 강제화하지 않고 경고만 표시하고 있다

 

 

pure

순수함수는 스토리지에서 변수를 읽거나 쓰지 않는 함수다

저장된 데이터를 참고하지 않고 인수에 대해서만 작동하고 데이터를 반환할 수 있다

순수함수는 부작용이나 상태가 없는 선언형 스타일의 프로그래밍을 지원하기 위한 것이다

 

 

payable

선언되어 있다면 입금을 받을 수 있는 함수이고,

그렇지 않다면 입금이 거부될 것이다

EVM에서 설계할 때 두 가지 예외가 있는데,

보상지불 및 SELFDESTRUCT다

이 두 가지 경우는 코드의 실행이 지불의 일부는 아니기 떄문에

폴백 함수가 payable로 선언되어 있지 않은 경우에도 지불될 것이다

 

 

 

 

 

Comments