일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- VUE
- react
- 백준
- 이더리움
- 클라우드
- 프론트엔드
- HTML
- 백엔드
- 블록체인
- 리액트
- 타입스크립트
- kubernetes
- BFS
- CSS
- 솔리디티
- AWS
- 컴퓨터공학
- 알고리즘
- es6
- 가상화
- 자바스크립트
- 이슈
- k8s
- TypeScript
- 웹
- JavaScript
- 쿠버네티스
- docker
- 파이썬
- next.js
Archives
- Today
- Total
즐겁게, 코드
솔리디티 - 06. 상속과 인터페이스 본문
솔리디티는 "계약 지향 프로그래밍 언어" 인데요, 사실 배우다 보면 객체지향 프로그래밍과도 유사한 점이 많습니다.
상속을 통해 "고양이는 동물이다" 처럼 부분집합 관계에 있는 컨트랙트의 논리적 계층구조를 표현할 수 있으며, 동일한 로직을 다수의 클래스로 분할해서 단순히 코드를 정리할 때도 활용할 수 있습니다.
1. 상속
솔리디티에서는 is
키워드를 통해 컨트랙트를 상속받을 수 있습니다.
contract Doge {
function catchphrase() public returns (string) {
return "So Wow CryptoDoge";
}
}
contract BabyDoge is Doge {
function anotherCatchphrase() public returns (string) {
return "Such Moon BabyDoge";
}
}
BabyDoge 컨트랙트는 Doge 컨트랙트를 상속받은 상태이며, 상속한 부모 컨트랙트의 internal 함수를 활용할 수 있습니다.
또한 상속받을 컨트랙트를 ,(콤마) 로 구분해 둘 이상의 컨트랙트를 다중 상속받는것도 가능합니다.
contract Doge {
function catchphrase() public returns (string) {
return "So Wow CryptoDoge";
}
}
contract BabyDoge is Doge, Etherium {
function anotherCatchphrase() public returns (string) {
return "Such Moon BabyDoge";
}
}
2. 인터페이스
인터페이스는 컨트랙트와 마찬가지로 contract
키워드를 사용해 생성할 수 있습니다.
다만, 다른 컨트랙트와 상호작용하는 함수만을 선언할 뿐, 다른 함수나 상태 변수를 사용하지 않습니다.
(* 함수를 선언하므로 본문은 구현하지 않습니다.)
contract KittyInterface {
function getKitty(uint256 _id) external view returns (
bool isGestating,
bool isReady,
uint256 cooldownIndex,
uint256 nextActionAt,
uint256 siringWithId,
uint256 birthTime,
uint256 matronId,
uint256 sireId,
uint256 generation,
uint256 genes
);
}
이렇게 생성한 인터페이스를 활용하기 위해서는 인자로 주소를 대입해 초기화해주면 됩니다.
contract KittyInterface {
function getKitty(address _id) external view returns (
bool isGestating,
bool isReady,
uint256 cooldownIndex,
uint256 nextActionAt,
uint256 siringWithId,
uint256 birthTime,
uint256 matronId,
uint256 sireId,
uint256 generation,
uint256 genes
);
}
contract MyContract {
address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
// 인터페이스를 사용하려면 고유의 address형 주소를 인자로 대입합니다.
KittyInterface kitty = KittyInterface(ckAddress)
function someFunction() public {
// 이제 `kitty`가 가리키고 있는 컨트랙트에서 `getKitty` 함수를 호출할 수 있습니다.
uint myKitty = kitty.getKitty(msg.sender);
}
}
반응형
'💬 언어 > Solidity' 카테고리의 다른 글
솔리디티 - 08. 가스 (Gas), 가스 최적화 기법 (0) | 2021.04.19 |
---|---|
솔리디티 - 07. 컨트랙트의 소유권 (0) | 2021.04.19 |
솔리디티 - 05. Storage와 Memory (0) | 2021.04.16 |
솔리디티 - 04. 매핑과 msg.sender (0) | 2021.04.16 |
솔리디티 - 03. 이벤트 (0) | 2021.04.16 |
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆