Java

[Java] 인터페이스와 추상클래스

parangofsky 2026. 1. 10. 00:20

오늘은 늘 헷갈리는 인터페이스, 추상클래스, 상속 등에 대해서 정리해보겠습니다.

 

 

1. 추상클래스

- abstract 키워드 사용

- 상속을 통해서 부모의 특징을 물려받음

- 다중 상속 불가능

- 상태 값 가질 수 있음

- 생성자 가질 수 있음

- 하나 이상의 추상 메서드 포함

abstract class Animal {
    String name; // 필드 가질 수 있음

    Animal(String name) { // 생성자 가능
        this.name = name;
    }

    void breathe() { // 일반 메서드
        System.out.println(name + "이(가) 숨을 쉽니다.");
    }

    abstract void sound(); // 자식이 반드시 구현해야 할 추상 메서드
}

class Dog extends Animal {
    Dog(String name) { super(name); }
    
    @Override
    void sound() {
        System.out.println("멍멍!");
    }
}

 

2. 인터페이스

- interface 키워드 사용

- 다중 구현 가능

- 모든 변수는 public static final

- 모든 메서드는 public abstract

 

 

추상클래스는 관련성이 높은 클래스들끼리 논리적으로 묶을 때 사용.

인터페이스는 관련 없는 클래스들이 공통된 동작을 가져야 할 때 사용.

 

요즘에는, 객체 간의 결합도를 낮추기 위해 인터페이스 위주의 설계를 권장한다고 한다.

 

 

인터페이스와 추상클래스의 가장 큰 차이점은 다중 유무이다.
추상클래스에서 다중 상속이 안 되는 이유는 '다이아몬드 문제(Diamond Problem)'로 인한 충돌과 모호성을 방지이다. 쉽게 말하자면, 부모 캘래스에 동일한 이름의 메서드가 있다면 자식 클래스는 어떤 메서드를 사용해야 할지 결정할 수 없게 되기 때문이다.

 

 

참고로, c++에서는 이런 충돌 문제가 발생하면 virtual inheritance같은 문법을 사용하여 개발자가 직접 해결.

'Java' 카테고리의 다른 글

[Java] static class와 static method  (0) 2026.01.16
[Java] 리플렉션(Reflection)  (0) 2026.01.13
[Java] 객체지향 - final 2  (0) 2026.01.09
[Java] 객체지향  (0) 2026.01.08
[Java] JVM 2  (0) 2026.01.07