반응형
1. Java의 상속과 인터페이스란?
상속과 인터페이스는 객체 지향 프로그래밍(OOP)의 주요 개념으로, 코드의 재사용성과 유연성을 높이는 데 사용됩니다.
- 상속은 기존 클래스를 확장하여 새로운 클래스를 만드는 기능입니다.
- 인터페이스는 클래스가 특정 동작을 반드시 구현하도록 강제하는 계약과 같은 역할을 합니다.
2. extends
키워드: 클래스 상속
2.1 클래스 상속이란?
클래스 상속은 부모 클래스(또는 슈퍼 클래스)의 속성과 메서드를 자식 클래스(또는 서브 클래스)에서 재사용하거나 확장하는 기능을 제공합니다.
- 부모 클래스의 코드를 수정하지 않고 기능을 확장할 수 있습니다.
- 자식 클래스는 부모 클래스의 모든 비공개 멤버(private)를 제외한 멤버를 상속받습니다.
2.2 클래스 상속의 문법과 기본 예제
문법
class 부모클래스 {
// 부모 클래스의 멤버
}
class 자식클래스 extends 부모클래스 {
// 자식 클래스의 멤버
}
기본 예제
class Animal {
String name;
public void eat() {
System.out.println(name + " is eating.");
}
}
class Dog extends Animal {
public void bark() {
System.out.println(name + " is barking.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "Buddy";
dog.eat(); // 부모 클래스의 메서드 호출
dog.bark(); // 자식 클래스의 메서드 호출
}
}
2.3 상속의 장점과 한계
장점
- 코드 재사용성: 기존 코드를 재사용하여 새로운 클래스를 빠르게 생성.
- 유지보수성: 공통된 기능은 부모 클래스에서 관리하여 수정 시 효율성 증대.
- 다형성(Polymorphism): 부모 클래스 타입으로 자식 클래스 객체를 참조 가능.
한계
- 다중 상속 불가: Java는 단일 상속만 지원 (
extends
는 한 클래스만 상속 가능). - 캡슐화 제한: 부모 클래스의
protected
및public
멤버가 외부에 노출될 수 있음.
3. implements
키워드: 인터페이스 구현
3.1 인터페이스란?
인터페이스는 클래스가 구현해야 할 메서드의 집합입니다.
인터페이스는 다중 구현이 가능하며, 구현 클래스는 반드시 인터페이스의 메서드를 정의해야 합니다.
인터페이스의 주요 특징
- 모든 메서드는 기본적으로
public abstract
입니다. - 모든 필드는
public static final
입니다. - 다중 구현이 가능합니다.
3.2 인터페이스 구현의 문법과 기본 예제
문법
interface 인터페이스명 {
// 추상 메서드
void 메서드명();
}
class 클래스명 implements 인터페이스명 {
@Override
public void 메서드명() {
// 메서드 구현
}
}
기본 예제
interface Flyable {
void fly();
}
class Bird implements Flyable {
@Override
public void fly() {
System.out.println("Bird is flying.");
}
}
public class Main {
public static void main(String[] args) {
Bird bird = new Bird();
bird.fly(); // 인터페이스 메서드 구현 호출
}
}
3.3 다중 구현의 특징
Java는 다중 상속을 지원하지 않지만, 인터페이스는 다중 구현이 가능합니다.
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
class Duck implements Flyable, Swimmable {
@Override
public void fly() {
System.out.println("Duck is flying.");
}
@Override
public void swim() {
System.out.println("Duck is swimming.");
}
}
public class Main {
public static void main(String[] args) {
Duck duck = new Duck();
duck.fly();
duck.swim();
}
}
4. extends
와 implements
의 차이점
특징 | extends | implements |
---|---|---|
용도 | 클래스 상속 | 인터페이스 구현 |
다중 사용 | 단일 클래스만 상속 가능 | 다중 인터페이스 구현 가능 |
기능 추가 여부 | 부모 클래스의 기능을 확장하거나 재정의 | 인터페이스의 메서드를 반드시 구현 |
상속 대상 | 기존 클래스 | 인터페이스 |
5. 클래스 상속과 인터페이스를 함께 사용하는 방법
Java 클래스는 하나의 클래스를 상속받으면서 여러 인터페이스를 구현할 수 있습니다.
예제
class Animal {
void eat() {
System.out.println("Eating...");
}
}
interface Walkable {
void walk();
}
interface Swimmable {
void swim();
}
class Dog extends Animal implements Walkable, Swimmable {
@Override
public void walk() {
System.out.println("Dog is walking.");
}
@Override
public void swim() {
System.out.println("Dog is swimming.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 부모 클래스 메서드
dog.walk(); // 인터페이스 메서드
dog.swim(); // 인터페이스 메서드
}
}
6. 추상 클래스와 인터페이스 비교
특징 | 추상 클래스 | 인터페이스 |
---|---|---|
목적 | 공통된 속성과 동작 정의 | 구현 강제 |
구성 요소 | 필드, 생성자, 일반 메서드 가능 | 상수와 추상 메서드만 포함 |
다중 상속 | 단일 상속만 가능 | 다중 구현 가능 |
Java 8 이후 | 디폴트 메서드와 정적 메서드 추가 가능 | 디폴트 및 정적 메서드 가능 |
7. 실제 개발에서의 활용 사례
상속 활용:
- 공통 동작이 많은 클래스들 사이에서 중복 코드를 줄이기 위해 상속을 사용.
- 예:
Employee
클래스를 상속받아Manager
와Engineer
클래스 구현.
인터페이스 활용:
- 다양한 클래스가 공통 동작을 구현해야 할 때 사용.
- 예:
PaymentProcessor
인터페이스를 구현한PayPalProcessor
와StripeProcessor
.
혼합 사용:
- 기본 기능은 상속을 통해 구현하고, 다양한 동작은 인터페이스를 통해 추가.
- 예:
Animal
클래스를 상속받고,Flyable
및Swimmable
인터페이스 구현.
8. 결론
Java의 extends
와 implements
는 객체 지향 프로그래밍에서 중요한 역할을 하며, 올바른 사용법을 이해하면 더 읽기 쉽고 유지보수하기 좋은 코드를 작성할 수 있습니다. 상속은 기존 클래스를 확장하고, 인터페이스는 구현 강제를 통해 더 유연한 설계를 가능하게 합니다. 두 개념을 적절히 조합하여 효율적인 코드 구조를 설계해 보세요.
반응형
'개발 > JAVA' 카테고리의 다른 글
Java에서 사용되는 연산자의 종류와 사용법 완벽 가이드 (0) | 2025.01.26 |
---|---|
Java에서 형변환(Casting)의 모든 것: 기본형부터 참조형까지 (1) | 2025.01.26 |
Java 로그 설정과 사용법 완벽 가이드: 안정적인 로깅 시스템 구축하기 (0) | 2025.01.25 |
Java 예외 처리 완벽 가이드: `try-catch`로 안정적인 프로그램 만들기 (0) | 2025.01.24 |
Java에서 여러 타입의 파라미터 받기 (0) | 2025.01.16 |