블록체인 학습
0 XP

상속이란?

상속(inheritance) 은 한 컨트랙트가 다른 컨트랙트의 상태 변수와 함수를 그대로 물려받는 기능입니다. 공통 기능을 부모 컨트랙트(base contract) 에 한 번만 작성해 두면, 여러 자식 컨트랙트(derived contract) 가 같은 코드를 다시 쓰지 않고 재사용할 수 있습니다. 객체지향 언어의 클래스 상속과 비슷하지만, Solidity 에서는 상속이 단순한 코드 재사용을 넘어 배포되는 바이트코드의 구성 방식 까지 결정합니다. 자식을 배포하면 부모의 코드가 자식 안에 합쳐져 하나의 컨트랙트로 만들어지기 때문입니다.

왜 상속을 쓰는가

상속을 쓰는 가장 큰 이유는 중복 제거 입니다. 토큰마다 잔액 관리, 소유자 권한, 전송 로직을 매번 새로 작성하는 대신 검증된 부모 컨트랙트를 물려받으면 됩니다.

두 번째 이유는 안전성 입니다.수많은 프로젝트가 오랫동안 써 온 코드는 갓 작성한 코드보다 버그 위험이 훨씬 낮습니다. 실제로 OpenZeppelin 같은 표준 라이브러리는 Ownable, ERC20 처럼 잘 검증된 부모 컨트랙트를 제공하고, 개발자는 이를 상속해 자신의 컨트랙트를 빠르게 완성합니다.

상속을 사용하면 중복 코드를 줄이고, 잘 검증된 기능을 안전하게 재사용할 수 있습니다.

부모와 자식

아래에서 Child 는 Parent 를 상속받아, 따로 선언하지 않은 name 변수와 getName 함수를 그대로 사용할 수 있습니다. 부모에 있는 멤버를 자식이 직접 선언한 것처럼 다룰 수 있다는 점이 상속의 핵심입니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract Parent {
    string public name = "Parent";
 
    function getName() public view returns (string memory) {
        return name;
    }
}
 
contract Child is Parent {
    // name 과 getName 을 물려받았으므로 별도 선언이 필요 없습니다.
}

상속 관계는 "is-a(~의 일종이다)" 관계로 생각하면 좋습니다. Cat is Animal 처럼 자식이 부모의 한 종류일 때 상속이 자연스럽습니다.

이처럼 상속은 코드 재사용과 표준화에 중요한 역할을 합니다.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.