Java 인터페이스와 상속

Java 인터페이스와 상속

객체지향 프로그래밍에서 "타입의 계약"을 만들고, "클래스를 재사용"하는 두 축이 있어요. 하나는 인터페이스, 하나는 상속이에요. Java는 이 둘을 통해 코드의 구조를 설계해요. 이 강의는 인터페이스가 왜 필요한지, 그리고 클래스가 어떻게 상속되는지를 다뤄요.

출처: Lesson: Interfaces and Inheritance (The Java Tutorials)

인터페이스(Interfaces)

인터페이스는 클래스가 반드시 갖춰야 할 메서드의 시그니처를 정의하는 계약이에요. 왜 인터페이스가 필요할까요? 어떤 객체가 "무엇을 할 수 있는지"를 타입으로 드러내고 싶을 때 써요. 같은 인터페이스를 구현한 서로 다른 클래스는, 그 인터페이스 타입으로 바라보았을 때 같은 동작을 보장해요.

public interface Animal {
    void makeSound();
}

이 강의에서는 이전 강의에서 본 인터페이스 구현 예시를 바탕으로, 인터페이스가 무엇을 위한 것인지, 왜 작성하는지, 어떻게 작성하는지를 자세히 다뤄요.

상속(Inheritance)

상속은 한 클래스가 다른 클래스로부터 필드와 메서드를 물려받는 방식을 다뤄요. **서브클래스(subclass)**는 **슈퍼클래스(superclass)**로부터 필드와 메서드를 상속받아요. 그리고 Java의 모든 클래스는 궁극적으로 Object 클래스에서 파생된다는 점을 배우게 돼요.

public class Bicycle {
    // ...
}

public class MountainBike extends Bicycle {
    // Bicycle의 필드와 메서드를 상속받음
}

상속은 코드 재사용의 핵심이에요. 공통적인 성질을 슈퍼클래스에 두고, 각 서브클래스는 필요한 부분만 추가하거나 오버라이드해서 구체화해요. 또 인터페이스처럼 생긴 **추상 클래스(abstract class)**에 대해서도 다뤄요. 추상 클래스는 공통 구현을 제공하면서 일부 메서드는 서브클래스가 반드시 구현하도록 강제할 수 있어요.

정리하면, "동작의 계약"이 필요하면 인터페이스, "공통 구현의 재사용"이 필요하면 상속(추상 클래스 포함)을 고르면 돼요. Java 설계에서 이 둘을 어떻게 조합할지가 핵심 감각이에요.

더 알아보기