저희는 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 스마트 컨트랙에서 그대로 상속 받아서, 이 함수들과 변수들을 접근 해볼것입니다.
// SPDX-License-Identifier:GPL-30
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을 변경시켜 줍니다.
아무리 아들이 아버지의 것을 상속 받는다 하여도, 이름은 다르겠죠?
그렇기 때문에, 저희는 이 생성자를 통해서, 아들의 이름을 아버지와 다르게, 따로 유니크 하게 지정 할 수 있답니다.
// SPDX-License-Identifier:GPL-30
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임 을 알수가 있습니다.