추상클래스와 인터페이스의 공통점
1. 추상 메서드를 포함할 수 있다.
- 추상 클래스와 인터페이스 모두 추상 메서드를 포함할 수 있다. 추상 메서드는 구현을 갖지 않고 메서드의 선언만 존재하는 것으로, 하위 클래스에서 반드시 구현해야 한다.
2. 다형성을 지원한다.
- 추상 클래스와 인터페이스는 다형성을 지원하기 위해 사용된다. 이를 통해 하나의 타입으로 서로 다른 구현체를 사용할 수 있으며, 유연하고 확장 가능한 코드를 작성할 수 있다.
3. 인스턴스화할 수 없다.
- 추상 클래스와 인터페이스는 각각 new 키워드로 직접 인스턴스화할 수 없다. 추상 클래스는 하위 클래스를 통해 인스턴스화되고, 인터페이스는 구현 클래스를 통해 인스턴스화된다.
추상클래스와 인터페이스의 차이점
1. 구현 내용의 존재 여부
- 추상 클래스는 추상 메서드 외에도 일반 멤버 변수와 메서드를 포함할 수 있다. 따라서 추상 클래스는 일부 기능을 구현한 상태에서 추상 메서드를 하위 클래스에게 구현을 위임할 수 있다.
- 반면에 인터페이스는 추상 메서드와 상수만을 가지며, 구현 내용이 없다. 따라서 인터페이스를 구현하는 클래스는 모든 메서드를 직접 구현해야 한다.
2. 상속과 구현의 가능 여부
- 클래스는 추상 클래스를 상속하거나 다른 클래스를 확장할 수 있다. 이는 단일 상속만을 지원하는 자바에서 유용하게 사용된다.
- 인터페이스는 클래스가 아닌 인터페이스를 구현할 수 있다. 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있으며, 다중 상속을 흉내내는 역할을 한다.
3. 사용 목적과 설계 원칙
- 추상 클래스는 하위 클래스에게 공통된 특성과 동작을 상속해주기 위해 사용된다. 추상 클래스의 객체는 실체화되지 않아도 되는 공통 기능의 일부를 구현하고, 하위 클래스가 필요에 따라 재정의할 수 있도록 한다.
- 인터페이스는 구현 클래스에게 특정 동작을 지정하기 위해 사용된다. 인터페이스는 어떤 객체가 가지고 있는 메서드와 상수의 목록을 정의하고, 해당 인터페이스를 구현하는 클래스가 반드시 메서드를 구현하도록 강제하는 역할을 한다.
정리
추상 클래스와 인터페이스는 추상 메서드의 선언을 통해 다형성을 지원하는 공통점을 가지고 있습니다. 하지만 구현 내용의 존재 여부, 상속과 구현의 가능 여부, 사용 목적과 설계 원칙 등에서 차이가 있습니다. 추상 클래스는 일부 구현된 멤버와 추상 메서드를 포함하여 하위 클래스에게 공통 기능을 상속해주는 역할을 한다면, 인터페이스는 구현 클래스에게 특정 동작을 지정하여 일관성 있는 코드를 작성할 수 있도록 한다고 할 수 있습니다.
댓글