
안녕하세요
오늘은 간단하게 상속을 하는 법을 배워 보겠습니다.
상속 이란?
모두다 알다시피, 윗 사람이 죽으면, 그 죽은 사람의 재산 이나 권리를 아랫 사람에게 주는것이죠.
이와 같이, 스마트 컨트랙 내에서도, 상속이라는 것이 이루어집니다.
스마트 컨트랙 사이의 상속은 재산이나 권리를 주는것이 아닌, 변수와 함수들을 상속 해줍니다.
쉽게 예를 들어서,
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
}
contract Son{
}
Father 과 Son 두개의 부자(父子) 관계 컨트랙이 있습니다.
저희는 Father 스마트 컨트랙에 기능을 구현후 아들이 아버지의 기능을 상속받도록 구현 해볼게요.
contract Father{
string public familyName = "Kim";
string public givenName = "Jung";
uint256 public money = 100;
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;
}
}
현재 아버지 컨트랙에는 3개의 변수 3개의 함수가 있습니다.
familyName 과 givenName 은 각각 성과 이름을 나타냅다.
성은 kim 이름은 Jung 입니다.
그리고 money는 아버지의 재산이라고 가정하고, 100 이라는 값을 나타 냅니다.
100은 100만원이라 가정하겠습니다.
나머지 3 개의 함수들은 각각 3개의 변수 성 familyName, 이름 givenName, 재산 money 를 리턴 합니다.
자 인제 이 3개의 변수와 함수를 Son 스마트 컨트랙에서 그대로 상속 받아서, 이 함수들과 변수들을 접근 해볼것입니다.
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
string public familyName = "Kim";
string public givenName = "Jung";
uint256 public money = 100;
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{
}
위에 보시는 바와 같이 Son 스마트 컨트랙은 Father 스마트 컨트랙을 아주 쉽게 했음을 알 수있습니다.
상속 받을 컨트랙 is 상속 주는 스마트 컨트랙 {
//....
}
라는걸 알 수 가있습니다.
인제 Son 스마트 컨트랙이 상속을 받았으니 컴파일후 배포를 한다면, Father의 스마트 컨트랙 변수 와 함수들을 모두 받아서 사용가능함을 볼 수가 있습니다.
만약에 지난번 강의처럼 Father에 constructor가 있다면 어떻게 될까요?
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;
}
}
위의 예시를 보면 Father 보면 constructor 가 나옴을 알 수 있죠.
이 생성자는 givenName을 변경시켜 줍니다.
아무리 아들이 아버지의 것을 상속 받는다 하여도, 이름은 다르겠죠?
그렇기 때문에, 저희는 이 생성자를 통해서, 아들의 이름을 아버지와 다르게, 따로 유니크 하게 지정 할 수 있답니다.
pragma solidity >= 0.7.0 < 0.9.0;
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"){
}
위에 예제와 같이
상속 받을 컨트랙 is 상속 주는 스마트 컨트랙 (파라메터 쓰기) {
//....
}
이런식으로 파라메터를 넣어 줌으로써, 이름을 변경할 수 있답니다.
son을 컴파일 후 배포를 한다면,
이런식으로 givenName이 아버지의 이름 Jung 이 아닌 James임 을 알수가 있습니다.
비디오는 꼭 참고하셔야 도움이되요