📝 Visibility
- private : 내부(컨트랙트)에서만 접근 가능
internal : 내부, 상속한 곳에서 접근 가능
external : 외부에서만 접근 가능
public : 어디에서든 접근 가능
→ Visibility 코드
- visibility는 한 번 설정하면 변경이 사실상 불가
📝 Inheritance (상속)
1. Inheritance
- 다중 상속 가능 (여러개 한 번에 상속)
- 상속-상속 가능 (상속한 것 또 상속)
contract 컨트랙트명 is 상속받을컨트랙트명{
}
2. virtual / override
- override는 부모 함수를 덮어씌워 작성하는 형태
- 기존의 함수와 함수명만 동일하고 나머지 내용은 새로 작성됨
(상속 중 함수명이 겹칠 때 사용됨)
- 부모 함수에는
virtual
, 자식 함수에는 override
를 작성
- 함수만 override 가능 (변수는 불가능)
- 상속받은 함수를 또 상속할 경우, virtual와 override 동시 선언 가능
→ virtual / override 코드
※ input값이 다른 경우 : input값의 개수나 타입이 부모 함수와 다를 경우, 다른 함수로 인식 (함수명이 겹쳐도 input값이 다르면 괜찮음 ; override사용 x)
3. super
- 나에게 상속해 준 부모로부터 특정 함수를 받아올 때 사용
- 다중 상속의 경우 상속 순서에 따라 마지막 상속받은 값이 출력됨
super.함수명
(super뒤에 바로 변수가 오지는 못함)
→ super 코드
4. new
- 인스턴스화 (외부라고 인식)
DAD husband = new DAD();
: DAD는 인스턴스화한 컨트랙트, husband는 새로 선언한 변수명
- 상속은 internal접근 가능, 인스턴스화(new)는 external 접근 가능
- 컨트랙트를 변수화하기 때문에 형태만 같을 뿐, 대상 스마트 컨트랙트와는 주소가 다름 ( new선언시 새로 배포됨 )
→ new 코드
new DAD()
새로운 컨트랙트를 만듦 ; 새 리프 노드를 만듦
DAD(_address)
지갑주소를 인풋으로 넣으면 ; 리프 노드를 찾아 들어감