체인의정석

Solidity에서 인터페이스의 상속과 단순 import의 차이 본문

블록체인/Solidity

Solidity에서 인터페이스의 상속과 단순 import의 차이

체인의정석 2022. 1. 25. 16:31
728x90
반응형

인터페이스는 external로 정의를 한다. 이 경우 상속을 받으면 불러오거나 사용이 불가능하다.

따라서 상속을 해오지 않고 인터페이스를 import 만 해서  사용한다.

만약 인터페이스를 import 하는 경우 덮어써서 사용하는 방법인데 0.5.0 버전까지는 같은 이름으로 다시 작성을 하면 되며

다른것은 override 변수를 씌워주어야 한다.

 

인터페이스의 경우 활용법이 매우 햇갈리는것 같은데 정리된 사항은 다음과 같다.

 

1. 인터페이스의 경우 external로 통일한다.

2. 인터페이스의 경우 상속을 하면 오버라이딩을 통하여 사용을 한다.

3. 상속을 하지 않고 import만 하는 경우 함수 그대로 다른 컨트렉트의 주소를 넣어서 외부 호출을 할 때 사용한다.

4. 컨트렉트의 효율성을 위하여 하위 단계의 컨트렉트가 여러 유형이 있을 시 인터페이스를 import 하여 외부호출을 사용하고 하위의 컨트렉트는 인터페이스를 상속받아 함수의 내용을 각자에 맞게 작성한다.

5. 인터페이스가 상속하는 하위 컨트렉트에서 이미 상속이 되었다면 상위 레벨의 컨트렉트에서는 더 이상 상속하지 않아도 된다.

6. ERC 표준이 아닌 확장 부분 mintable, burnable과 같은 경우는 따로 구현하거나 확장 표준을 다운받아 사용할 수 있는데 확장 표준을 가져와서 사용하는 경우에는 Role 부분도 분리되어 있기 때문에 이에 유의한다.

5. 상속관계와 상하위 레벨을 분리할 때는 주소를 set하고 get해오는 함수를 작성해오고 이를 modifier로 작성하여 잘못된 호출의 가능성을 배제시킨다.

6. 변수나 구조체를 public으로 공개하지 말고 프라이빗으로 둔 후 조회하는 view 함수를 구현하다. 구현한 view 함수는 extrnal로 인터페이스에 놓고 다른 컨트렉트는 해당 view 함수를 사용하여서 조회를 해오도록 한다.

7. 인터페이스에 들어갈 address는 설정해둔 프라이빗 변수를 사용하는 식으로 가능하다.

 

=> 인터페이스와 컨트렉트간의 관계를 레벨에 맞게 잘 설계해야 제대로된 배포와 효율적인 컨트렉트의 관리가 가능하며, 조회의 경우 함수를 만들어서 하고 상속의 경우 

728x90
반응형
Comments