[solidity] Visibility & Contract 상속해서 쓰는 법

HyeongA·2023년 5월 16일
0

Blockchain_dev

목록 보기
7/20
post-thumbnail

📝 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) 지갑주소를 인풋으로 넣으면 ; 리프 노드를 찾아 들어감
profile
Solidity | React | Python

0개의 댓글