[java] 추상 클래스와 인터페이스의 용도에 따른 선택 기준
자바에서 추상 클래스와 인터페이스는 다형성을 구현하기 위한 중요한 도구입니다. 각각의 특징과 용도를 이해하고, 어떤 상황에서 어떤 것을 사용해야 하는지 선택하는 기준을 알아보겠습니다.
추상 클래스 (Abstract Class)
추상 클래스는 일반 클래스와 달리 “추상 메서드”를 포함할 수 있는 클래스입니다. 추상 메서드는 구현이 없이 선언만 되어 있어 하위 클래스에서 반드시 구현해야 합니다. 또한, 추상 클래스는 인스턴스화할 수 없고, 상속을 통해 하위 클래스에서만 사용됩니다.
추상 클래스의 주요 용도는 다음과 같습니다:
- 공통적인 특징과 동작을 가진 클래스를 정의하여 코드의 재사용성을 높입니다.
- 하위 클래스들 사이에서 공통적인 메서드를 추상 메서드로 선언하여, 각 클래스의 특정 구현을 강제할 수 있습니다.
- 추상 클래스에 일반 메서드를 구현하여 공통적인 동작을 제공할 수 있습니다.
추상 클래스를 사용하는 경우:
- 상속 관계를 가지는 클래스들 간의 공통 로직을 정의하고 싶을 때
- 하위 클래스에서 반드시 구현되어야 하는 메서드가 있는 경우
인터페이스 (Interface)
인터페이스는 메서드의 선언만 있다는 점에서 추상 클래스와 비슷합니다. 하지만 인터페이스는 멤버 변수를 가질 수 없고, 모든 메서드는 기본적으로 추상 메서드로 선언됩니다. 또한, 다중 상속이 가능하므로 여러 개의 인터페이스를 구현할 수 있습니다.
인터페이스의 주요 용도는 다음과 같습니다:
- 다중 상속을 지원하여 동시에 여러 개의 인터페이스를 구현할 수 있습니다.
- 각각의 클래스가 인터페이스를 구현함으로써, 특정한 동작을 보장할 수 있습니다.
- 코드의 유연성과 확장성을 높여 개발자들이 특정한 인터페이스를 구현하여 다양한 기능을 제공할 수 있습니다.
인터페이스를 사용하는 경우:
- 다중 상속이 필요한 경우
- 다른 클래스들이 동일한 동작을 보장해야 하는 경우
추상 클래스 vs 인터페이스
추상 클래스와 인터페이스는 각각의 특징과 용도에 따라 선택해야 합니다. 일반적으로는 다음과 같은 가이드라인을 따릅니다:
- 추상 클래스는 “is-a” 관계로 타입 체크가 필요한 경우에 사용합니다. 즉, 하위 클래스가 상위 클래스의 한 유형이 되어야 하는 경우 사용합니다. 또한 공통적인 동작을 제공하는 경우에도 추상 클래스를 활용할 수 있습니다.
- 인터페이스는 “can-do” 관계로 특정한 기능을 수행하는 능력을 지칭할 때 사용합니다. 다중 상속이 필요한 경우나 여러 개의 클래스가 동일한 동작을 보장해야 할 때 인터페이스를 활용할 수 있습니다.
마지막으로, 추상 클래스와 인터페이스는 사용자의 요구사항과 프로그램의 구조에 따라 다르게 선택되어야 합니다. 개발자는 자신의 프로젝트에 적합한 방법을 선택하여 코드의 유연성과 확장성을 높일 수 있도록 고려해야 합니다.