[java] 자바 추상 클래스와 인터페이스의 사용 비용에 대한 고려사항

자바에서 추상 클래스와 인터페이스는 다형성을 구현하고 코드 재사용성을 높이는 강력한 도구입니다. 그러나 이러한 기능을 사용할 때는 몇 가지 비용을 고려해야 합니다.

1. 상속의 한계

추상 클래스를 사용하여 클래스를 상속할 경우, 자식 클래스는 하나의 추상 클래스만 상속받을 수 있습니다. 이는 자바가 단일 상속만을 지원하기 때문입니다. 따라서 이미 다른 클래스를 상속받은 자식 클래스에게 추상 클래스를 상속시키려면 다중 상속이 필요한 경우라면 인터페이스를 사용하는 것이 더 적절할 수 있습니다.

2. 구현의 강제

인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드를 구현해야 합니다. 이는 클래스가 다른 인터페이스와 함께 동작할 수 있도록 강제하는 장점이지만, 클래스 마다 모든 메서드를 구현해야 한다는 점에서 코드의 양이 증가할 수 있습니다. 따라서 필요한 메서드만 구현하고 나머지 메서드는 빈 구현체로 남겨둘 경우, 추상 클래스를 사용하는 것이 더 효율적일 수 있습니다.

3. 유연성과 결합도

추상 클래스는 일부 기능을 구현하고 나머지 기능을 자식 클래스에게 위임할 수 있습니다. 이는 자식 클래스가 기본 동작을 재정의하거나 확장할 수 있는 유연성을 제공합니다. 하지만 이러한 구조는 자식 클래스와 추상 클래스 간의 결합도를 높여 프로그램의 유연성을 제한할 수 있습니다. 인터페이스를 사용할 경우, 클래스들은 모든 메서드를 구현해야 하기 때문에 결합도가 낮아질 수 있습니다.

4. 사용자의 이해도

인터페이스는 메서드만을 선언하고 구현 내용을 감추기 때문에 외부에서는 인터페이스의 사용 방법만을 알 수 있습니다. 반면에 추상 클래스는 일부 구현을 제공하고 있기 때문에 사용자 입장에서는 추상 클래스의 목적과 기능을 더 명확하게 이해할 수 있습니다.


자바에서 추상 클래스와 인터페이스는 각자의 장단점과 사용 비용이 있습니다. 어떤 상황에서 어떤 것을 사용하는 것이 적합한지 고려하여 프로젝트에 적용해야 합니다. 이를 통해 적절한 추상화 수준과 유연성을 가진 코드를 작성할 수 있습니다.

참고 자료