Solidity 문법 - (10) 상속과 오버라이딩
2023. 5. 30. 15:21ㆍBlockChain/Solidity 깨부수기 ( 유투브 강의 )
목차 |
1. 상속 |
2. 상속 예제 코드 |
3. 오버라이딩 |
4. 오버라이딩 예제 코드 |
1. 상속
한 컨트랙트에서 다른 컨트랙트에 있는 기능들을 사용할 수 있는 기능이다.
자바스크립트의 상속과 비슷하다.
상속을 받는 방식은 다음과 같다.
contract [상속받을 컨트랙트명(자식)] is [상속할 컨트랙트명(부모)] {
// 코드 작성
}
만약 상속할 컨트랙트에 생성자 함수가 있다면 다음과 같이 사용해야한다.
contract [상속받을 컨트랙트명] is [상속할 컨트랙트명]("생성자 인수") {
}
// 또는
contract [상속받을 컨트랙트명] is [상속할 컨트랙트명] {
constructor() [상속할 컨트랙트명]("생성자 인수"){
}
}
2. 상속 예제 코드
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Bird {
uint256 public wings = 2;
uint256 public legs = 2;
string public eat;
constructor(string memory _eat){
eat = _eat;
}
function getWingsNum() view public returns(uint256){
return wings;
}
function getLegsNum() view public returns(uint256){
return legs;
}
function getNmae() view public returns(string memory){
return eat;
}
}
contract Eagle is Bird("Snake") {
}
위의 코드를 컴파일하여 배포한 뒤 Eagle의 인스턴스를 확인해보면 Bird 컨트랙트의 내용이 잘 나오는 것을 알 수 있고,
생성자에 넣어준 "Snake"도 eat( )을 실행하면 잘 나오는 것을 볼 수 있다.
3. 오버라이딩
상속받은 함수를 변형시켜 사용할 수 있는 기능이다.
같은 이름의 함수를 받아서 새로 커스텀해서 사용할 수 있다.
타입스크립트나 자바스크립트에서 사용했던 추상 클래스를 구현한 것과 비슷하다.
문법은 내보낼 부모 컨트랙트의 오버라이드시킬 함수에 virtual 키워드를 적어주고,
자식 컨트랙트의 오버라이드할 함수에 overide 키워드를 적어주면된다.
4. 오버라이딩 예제코드
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Bird {
uint256 public wings = 2;
uint256 public legs = 2;
string public eat;
constructor(string memory _eat){
eat = _eat;
}
function getWingsNum() view virtual public returns(uint256){
return wings;
}
function getLegsNum() view public returns(uint256){
return legs;
}
function getNmae() view public returns(string memory){
return eat;
}
}
contract Penguin is Bird("Fish") {
function getWingsNum() view override public returns(uint256){
return wings - 2;
}
}
위의 코드는 Penguin 컨트랙트에서 날개를 상속받아서 로직을 변경한 코드이다.
wings가 2 - 2 = 0이 잘 출력되는것을 알 수 있다.
'BlockChain > Solidity 깨부수기 ( 유투브 강의 )' 카테고리의 다른 글
Solidity 문법 - (12) 상속의 순서와 super (0) | 2023.05.30 |
---|---|
Solidity 문법 - (11) Event (0) | 2023.05.30 |
Solidity 문법 - (9) Contract 생성자 함수 (0) | 2023.05.29 |
Solidity 문법 - (8) 인스턴스의 생성과 사용 (0) | 2023.05.29 |
Solidity 문법 - (7) 저장방식 (0) | 2023.05.29 |