상속 / override
이번시간에는 상속과 override에 대해서 알아봅시다.
1. 상속
상속이란 무엇일까요?
재산을 물려받는다 라는 의미입니다.
솔리디티에서도 똑같이 상속 개념이 있습니다.
코드를 통해서 한번 봅시다.
contract Father {
string public lastName = "KIM";
string public firstName;
function firstName_() public virtual {
firstName = "Galaxy";
}
}
여기 Father 이라는 contract가 있습니다.
성이라는 lastName 변수를 갖고
이름이라는 firstName 변수를 갖고
firstName_ 라는 이름을 정의해주는 함수를 가지고있습니다
즉 아빠의 성은 KIM 이름은 Galaxy라는걸 확인 할 수 있죠.
간단하죠?
아직 함수옆에 virtual은 신경쓰지 말도록 합시다.
그럼 Father contract안에 있는 모든 변수와 함수를 자식한테 그대로 상속해주겠습니다.
contract Son is Father {
}
끝입니다. contract Son 옆에 is 키워드만 붙이면 상속이 완료가 됩니다.
너무 간단하죠?
Son을 배포해서 정말 상속이 잘 됐는지 확인해봅시다.
(배포 후)
변수 firstName과 lastName 잘 받았고
함수 firstName_도 잘 받은걸 확인 할 수 있습니다.
여기서 눈치빠른분이시라면 무언가 하나 이상한점을 발견했을 수도 있을겁니다.
firstName 변수를 보면 Galaxy라고 되어있죠?
아빠와 아들이 이름이 같아지는 이상한 현상이 발생했습니다.
이것도 해결해보도록 합시다.
2. override
override라는 영단어는 "덮어 씌우다" 라는 뜻입니다.
그럼 이 키워드를 이용해서 아들의 이름을 바꿔보도록 합시다.
1. 덮어씌울 함수에 virtual 키워드를 붙인다.
contract Father {
function firstName_() public virtual {
firstName = "Galaxy";
}
}
virtual은 가상이라는 뜻입니다.
즉 이 함수는 이제 override될 함수라는걸 알려주고있어 가상함수라는걸 알립니다.
2. 덮어씌우고 싶은 함수에 override 키워드를 붙인다.
contract Son is Father {
function firstName_() public override {
firstName = "Sun";
}
}
override 키워드를 붙임으로써 이 함수는 우리가 재정의를 할 수 있습니다.
firstName을 Galaxy가 아닌 Sun으로 바꿔주어 덮어씌웠습니다.
그러면 배포를 한번 해봅시다.
(배포 후)
이름이 Sun으로 바뀐걸 볼 수 있습니다.
이렇게 이번시간에는 상속과 override에 대해서 알아봤습니다.
어제보다 더 나은 오늘이 되셨으면 좋겠습니다.
감사합니다.