일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Deep Dive
- nft
- 블록체인
- 함수
- 솔리디티
- BOJ
- git pull
- 알고리즘
- Queue
- Javascript
- 변수
- Interview
- solidity
- Python
- 백준
- var
- blockchain
- 자바스크립트
- frontend
- Execution context
- 정렬
- Algorithm
- 파이썬
- 실행 컨텍스트
- 딥다이브
- let
- 프로퍼티
- 클로저
- react
- 리액트
Archives
- Today
- Total
공부하자
Solidity 기초 문법 - 상속 본문
상속
스마트 컨트랙 사이의 상속은 변수와 함수들을 상속해줍니다.
상속하는 방법
상속 받을 컨트랙(Son) is 상속 해주는 컨트랙(Father) { ... }
contract Father{
string public familyName = "Kim";
string public givenName = "Jung";
uint256 public money = 100;
constructor(string memory _givenName) public {
givenName = _givenName;
}
function getFamilyName() view public returns(string memory){
return familyName;
}
function getGivenName() view public returns(string memory){
return givenName;
}
function getMoney() view public returns(uint256){
return money;
}
}
contract Son is Father("James"){
}
위의 코드로 Son컨트랙이 Father 컨트랙을 상속받는 것을 알 수 있습니다.
또한 Father컨트랙에 constructor가 존재하면 Son컨트랙에 파라미터를 주어 상속받는 함수와 다르게 변수값을 변경할 수 있습니다.
overriding(오버라이딩)
상속받은 함수를 다르게 변경하고 싶을 때 사용합니다.
상속해주는 Father 컨트랙에서 오버라이딩 할 함수에(getMoney()) virtual을 명시해 Son 컨트랙에서 이 함수를 오버라이딩 할 것이라고 알려주어야 합니다.
상속받는 Son 컨트랙에서는 override를 명시해주면 오버라이딩 준비 끝!
이제 Son 컨트랙에 getMoney()함수를 원하는 방향으로 변경해주면 됩니다.
contract Father{
string public familyName = "Kim";
string public givenName = "Jung";
uint256 public money = 100;
constructor(string memory _givenName) public {
givenName = _givenName;
}
function getFamilyName() view public returns(string memory){
return familyName;
}
function getGivenName() view public returns(string memory){
return givenName;
}
function getMoney() view public virtual returns(uint256){
return money;
}
}
contract Son is Father("James"){
uint256 public earning = 0;
function work() public {
earning += 100;
}
function getMoney() view public override returns(uint256){
return money+earning;
}
}
2개 이상 상속하기
contract Father{
}
contract Mother{
}
contract Son is Father,Mother{
}
위 코드처럼 만들어주면 Son컨트랙이 Father컨트랙과 Mother컨트랙 둘 다 상속받는 것을 알 수 있습니다.
contract Father{
uint256 public fatherMoney = 100;
function getFatherName() public pure returns(string memory){
return "KimJung";
}
function getMoney() public view virtual returns(uint256){
return fatherMoney;
}
}
contract Mother{
uint256 public motherMoney = 500;
function getMotherName() public pure returns(string memory){
return "Leesol";
}
function getMoney() public view virtual returns(uint256){
return motherMoney;
}
}
contract Son is Father, Mother {
function getMoney() public view override(Father,Mother) returns(uint256){
return fatherMoney+motherMoney;
}
}
위의 코드를 보면 오버라이딩 할 때도, 오버라이딩 할 함수에 virtual을 명시해주고(Father와 Mother 컨트랙에 같은 이름의 함수가 존재해서 두 함수에 다 virtual을 넣어줌.) Son컨트랙에 override를 명시하고 괄호안에 Father와 Mother컨트랙을 넣어주면 됩니다.
도움 받은 곳 : https://dayone.tistory.com/
개인 공부를 위해 위의 강의를 정리한 내용입니다.
'Solidity' 카테고리의 다른 글
Solidity 기초 문법 - event (0) | 2022.04.01 |
---|---|
Solidity 기초 문법 - instance (0) | 2022.03.17 |
Solidity 기초 문법 - function (0) | 2022.03.09 |
Solidity 기초 문법 - 변수만들기 (0) | 2022.03.09 |
Comments