10. 상속과 인터페이스
자바에서 상속과 인터페이스는 객체 지향 프로그래밍의 중요한 특징 중 하나로, 코드의 재사용성과 유연성을 향상하는데 도움을 줍니다.
10.1. 클래스 상속(Inheritance)
상속(Inheritance)은 기존 클래스의 속성과 메소드를 새로운 클래스에 전달하는 프로세스입니다. 상속을 사용하면 기존 클래스의 기능을 수정하거나 확장할 수 있습니다. 상속에서 기존 클래스를 부모 클래스(Parent class) 또는 슈퍼 클래스(Superclass)라고 하고, 새로운 클래스를 자식 클래스(Child class) 또는 서브 클래스(Subclass)라고 합니다. 자바에서 상속은 extends 키워드를 사용하여 구현합니다.
class Animal {
String name;
void speak() {
System.out.println("동물이 소리를 낸다.");
}
}
class Dog extends Animal { // Animal 클래스를 상속받는 Dog 클래스
void bark() {
System.out.println("멍멍!");
}
}
10.2. 메소드 오버라이딩
메서드 오버라이딩(Overriding)은 자식 클래스에서 부모 클래스의 메서드를 재정의하는 것입니다. 자식 클래스는 부모 클래스의 메소드를 상속받아 사용할 수 있으나, 특정 메소드를 자식 클래스에 맞게 수정하고 싶을 때 메서드 오버라이딩을 사용합니다.
class Cat extends Animal {
@Override // 오버라이딩을 명시적으로 표시 (선택사항)
void speak() { // 부모 클래스의 speak 메소드를 오버라이딩
System.out.println("야옹!");
}
}
상속의 주요 이점은 코드 재사용성과 유지 관리성의 향상입니다. 자식 클래스는 부모 클래스의 속성과 메소드를 상속받아 새로운 기능을 추가하거나 수정할 수 있습니다.
10.3. 인터페이스 선언 및 구현
인터페이스(Interface)는 클래스가 구현해야 하는 메소드들의 집합으로, 일종의 템플릿입니다. 인터페이스는 상속과 비슷한 개념이지만, 추상 메소드만 포함하며, 멤버 변수를 가질 수 없습니다. 인터페이스는 키워드 interface를 사용하여 선언하고, 클래스에서는 implements 키워드를 사용하여 인터페이스를 구현합니다.
interface Flyable {
void fly(); // 추상 메소드
}
class Airplane implements Flyable { // Flyable 인터페이스를 구현하는 Airplane 클래스
@Override
public void fly() {
System.out.println("비행기가 날아갑니다.");
}
}
10.4. 다중 인터페이스 구현
자바에서 클래스는 다중 상속을 지원하지 않지만, 인터페이스는 다중 구현이 가능합니다. 클래스는 여러 인터페이스를 구현하여 다양한 기능을 동시에 가질 수 있습니다.
interface Swimable {
void swim(); // 추상 메소드
}
class Duck implements Flyable, Swimable { // Flyable과 Swimable 인터페이스를 모두 구현하는 Duck 클래스
@Override
public void fly() {
System.out.println("오리가 날아갑니다.");
}
@Override
public void swim() {
System.out.println("오리가 헤엄칩니다.");
}
}
위의 예시에서 Duck 클래스는 Flyable과 Swimable 인터페이스를 모두 구현하고 있습니다. 이를 통해 오리 객체는 날고, 헤엄치는 기능을 동시에 가지게 됩니다.
이처럼 다중 인터페이스 구현을 통해 자바에서는 다중 상속의 장점을 활용하면서도, 다중 상속의 단점인 복잡성과 모호성을 피할 수 있습니다. 이를 통해 클래스는 단일 상속을 유지하면서도 다양한 기능을 가질 수 있는 유연한 구조를 제공합니다.
'GD's IT Lectures : 기초부터 시리즈 > 자바(JAVA) 기초부터 ~' 카테고리의 다른 글
[자바(JAVA)] 패키지와 접근 제어자 (0) | 2023.04.27 |
---|---|
[자바(JAVA)] 추상 클래스와 인터페이스 (0) | 2023.04.27 |
[자바(JAVA)] 클래스와 객체 (0) | 2023.04.27 |
[자바(JAVA)] 문자열 처리 - StringBuilder와 StringBuffer 클래스 (0) | 2023.04.27 |
[자바(JAVA)] 문자열 처리 (0) | 2023.04.27 |
댓글