반응형

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 상속의 장점과 한계

장점

  1. 코드 재사용성: 기존 코드를 재사용하여 새로운 클래스를 빠르게 생성.
  2. 유지보수성: 공통된 기능은 부모 클래스에서 관리하여 수정 시 효율성 증대.
  3. 다형성(Polymorphism): 부모 클래스 타입으로 자식 클래스 객체를 참조 가능.

한계

  1. 다중 상속 불가: Java는 단일 상속만 지원 (extends는 한 클래스만 상속 가능).
  2. 캡슐화 제한: 부모 클래스의 protectedpublic 멤버가 외부에 노출될 수 있음.

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. extendsimplements의 차이점

특징 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. 실제 개발에서의 활용 사례

  1. 상속 활용:

    • 공통 동작이 많은 클래스들 사이에서 중복 코드를 줄이기 위해 상속을 사용.
    • 예: Employee 클래스를 상속받아 ManagerEngineer 클래스 구현.
  2. 인터페이스 활용:

    • 다양한 클래스가 공통 동작을 구현해야 할 때 사용.
    • 예: PaymentProcessor 인터페이스를 구현한 PayPalProcessorStripeProcessor.
  3. 혼합 사용:

    • 기본 기능은 상속을 통해 구현하고, 다양한 동작은 인터페이스를 통해 추가.
    • 예: Animal 클래스를 상속받고, FlyableSwimmable 인터페이스 구현.

8. 결론

Java의 extendsimplements는 객체 지향 프로그래밍에서 중요한 역할을 하며, 올바른 사용법을 이해하면 더 읽기 쉽고 유지보수하기 좋은 코드를 작성할 수 있습니다. 상속은 기존 클래스를 확장하고, 인터페이스는 구현 강제를 통해 더 유연한 설계를 가능하게 합니다. 두 개념을 적절히 조합하여 효율적인 코드 구조를 설계해 보세요.

반응형

+ Recent posts