주제
인터페이스와 추상클래스의 차이
내용
추상클래스 : is - a “~이다.”
// 추상클래스 public abstract class AbstractClass { private String name; protected AbstractClass(String name) { this.name = name; } abstract void method(); } // 구체클래스 public class RealClass extends AbstractClass { private String address; public RealClass(String name, String address) { super(name); this.address = address; } @Override void method() { System.out.println("출력"); } }
- abstract 키워드를 붙여서 선언한다.
- 객체를 직접 생성할 수 없다.
- 추상 클래스를 상속받은 클래스는 추상 메서드를 오버라이딩 해야 인스턴스를 생성할 수 있다.
- 다중 상속 불가능
- 추상 메서드 ?
- 선언부는 있지만 구현부가 없는 메서드
추상클래스 왜 사용할까 ? : 확장
- 서로 관련있는 클래스
- 공통된 필드와 메서드를 통일한다.
- 실체 클래스를 구현할 때 시간을 절약할 수 있다.
인터페이스 : has - a "~을 할 수 있는.”
public interface animal { void cry(); } public dog implements animal { @override public void cry() { System.out.println("멍멍"); } }
- 인터페이스의 구성
- 상수
- 추상 메서드
- default 메서드 → 선택적
- static 메서드
- 강력한 강제성을 가지게 하여 인터페이스를 implements한 클래스가 동일한 동작을 수행하도록 보장한다.
- 다중 구현 가능
- JAVA8 부터 디폴트 메소드를 허용하면서 유연성을 확보해주었다.
인터페이스 왜 사용할까?
- 서로 관련없는 클래스들
- 함수의 구현을 강제하여 구현 객체의 같은 동작을 보장할 수 있다.
결론
- 추상클래스에 대해 설명해주세요
- 추상 클래스는 abstract 로 정의되어 있으며 공통된 필드와 메소드를 통일하여 일반 클래스 작성 시 시간 절약이 가능하며 단일 상속만 가능합니다. 동일한 부모를 가지는 클래스를 묶는 개념으로 상속 받아 기능 확장이 목적입니다.
- 인터페이스에 대해 설명해주세요
- 인터페이스는 내부의 모든 메서드가 추상 메서드이고 추상 클래스보더 더 추상화된 클래스입니다. 자바 8부터 default를 통해 메서드 구현이 가능해졌습니다. 다중 상속이 가능하고 구현 객체가 같은 동작을 한다는 것을 보장합니다.
- 추상클래스와 인터페이스의 차이점에 대해 설명해주세요
- 추상클래스는 is a로 강아지는 동물이다. 를 말합니다. 단일 상속만 가능하며 목적은 상속을 받아 기능을 확장시키고 인터페이스는 has a로 강아지는 먹을 수 있다. 를 말합니다. 구현하는 모든 클래스에 대해 특정 메서드가 반드시 존재하도록 강제하는 역할을 함으로써 구현 객체가 같은 동작을 한다는 것을 보장합니다.