상속(Inheritance)이란?
상속이란 클래스 간의 관계를 나타낸다. 상속은 한 클래스가 다른 클래스의 특정과 동작을 확장하거나 재사용하는 메커니즘을 제공한다. 이것은 코드의 재사용성과 계층적 구조화를 촉진하며, OOP의 핵심 개념 중 하나이다.
상속을 제공하는 클래스를 의미한다. 부모 클래스는 자식 클래스에게 기능 및 특성을 상속한다.
상속을 받는 클래스를 의미한다. 자식 클래스는 부모 클래스로부터 상속받은 멤버(필드 및 메소드)를 포함하고, 필요한 경우에 새로운 멤버를 추가하거나 부모 클래스의 멤버를 재정의할 수 있다.
부모 클래스에서 정의된 필드와 메서드를 의미한다. 이러한 멤버는 자식 클래스에 상속된다.
자식 클래스에서 정의된 새로운 멤버 또는 부모클래스의 멤버를 재정의한 멤버를 의미한다. 이러한 멤버는 자식 클래스의 고유한 특성을 나타낸다.
상속(Inheritance)의 특징 및 장점
상속을 사용하면 이미 작성된 클래스의 코드를 재사용하여 새로운 클래스를 작성할 수 있다. 이렇게 하면 중복 코드를 줄이고 프로그램의 유지보수성을 향상시킬 수 있다.
상속은 클래스 간의 계층적인 관계를 구축하며, 부모 클래스와 여러 수준의 자식 클래스를 가질 수 있다.
자식 클래스는 부모 클래스의 메소드를 재정의(override)하여 자신만의 구현을 제공할 수 있다. 이를 통해 다형성(Polymorphism)을 구현할 수 있다.
자바와 같은 몇몇 객체 지향 프로그래밍 언어에서는 다중 상속을 지원하지 않는다. 다중 상속은 복잡성을 증가시킬 수 있으므로 다중 상속 대신 인터페이스와 추상 클래스를 사용하여 유사한 효과를 얻을 수 있다.
자바에서는 extends 키워드를 사용하여 클래스 간의 상속 관계를 정의한다.
class 동물 {
void 움직이다() {
System.out.println("움직입니다.");
}
}
class 새 extends 동물 {
void 날다() {
System.out.println("날아갑니다.");
}
}
위의 예제에서 새 클래스는 동물 클래스를 상속하며, 동물 클래스의 움직이다() 메소드를 상속받았고 날다() 라는 새로운 메소드를 추가했다. 이렇게 하면 새 클래스는 동물 클래스의 특성을 확장하고 동시에 자신만의 특성을 추가할 수 있다.
상속(Inheritance)은 어디에 쓰일까?
소프트웨어 아키텍트는 상속을 사용하여 소프트웨어 시스템을 계층화하고 모듈화하는 데 활용된다. 이로써 시스템을 더 관리하기 쉽게 만들고 여러 레벨의 추상화를 통해 복잡성을 관리할 수 있다.
라이브러리 및 프레임워크 개발자는 상속을 사용하여 기본 클래스 및 기능을 제공하고, 이러한 클래스를 확장하는 데 필요한 기능을 제공한다. 예를 들어, 자바에서는 스윙(Swing)프레임워크에서 GUI 컴포넌트를 구축할 때 JComponent와 JPanel등의 클래스를 상속하여 사용한다.
데이터 모델링 및 데이터베이스 연동 코드에서는 상속을 사용하여 공통 속성과 동작을 가진 데이터 모델 클래스를 정의하고, 이를 확장하여 특정 데이터 유형에 맞는 클래스를 생성한다.
UI 프레임워크를 개발하는 경우, 기본적인 UI 컴포넌트 클래스를 상속하여 커스텀 UI 컴포넌트를 만들 수 있다. 예를 들어, 안드로이드 앱에서 View 클래스를 상속하여 사용자 지정 뷰를 만든다.
테스트 자동화 프레임워크에서 상속을 사용하여 기본 테스트 케이스 클래스를 정의하고, 테스트 스위트마다 이를 확장하여 테스트 케이스를 작성한다. 또한, 모의 객체(Mocking) 라이브러리에서는 상속을 사용하여 가상 객체를 생성하고 테스트하는 데 활용한다.
게임 개발과 그래픽 프레임워크에서는 상속을 사용하여 게임 오브젝트, 씬, 그래픽 요소 등을 정의하고 계층화한다. 이렇게 하여 게임 엔진의 여러 요소를 조합하고 확장하는데 도움이 된다.
프로토콜과 통신 레이어에서는 상속을 사용하여 메시지 처리, 연결 관리 및 프로토콜 구현을 개발한다.