추상 클래스 (Abstract class)
클래스들의 공통적인 특성을 추출해서 선언한 클래스. (실체 클래스: 객체를 직접 생성할 수 있는 클래스)
클래스 내에 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 클래스.
추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성을 가질 수 있다.
추상클래스는 new 연산자를 사용해서 인스턴스를 생성시킬 수 없다.
Animal animal = new Animal(); (X)
추상 클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용된다. (extends 뒤에만 올 수 있는 클래스)
class Ant extends Animal { ... } (O)
추상 클래스의 용도
1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 수 있다.
2. 실체 클래스를 작성할 때 시간을 절약할 수 있다.
인터페이스 (Interface)
자바에서 다중 상속을 이용하고 싶을 때 인터페이스를 이용한다.
모든 메소드가 추상 메소드로 이루어진 것
개발 코드와 객체가 서로 통신하는 접점 역할을 하며, 객체의 사용 방법을 정의한 타입을 말한다.
인터페이스는 상수와 메소드만 구성 멤버로 가진다.(생성자를 가질 수 없다.)
인터페이스의 구성 멤버
- 상수 필드: 인터페이스는 데이터를 저장할 수 없기 때문에 인스턴스와 정적 필드를 선언할 수 없다. 상수 필드만 선언할 수 있다.
- 추상 메소드: 인터페이스를 통해 호출된 메소드는 최종적으로 객체에서 실행되기 때문에 실행 블록이 필요 없는 추상 메소드로 선언한다.
- 디폴트 메소드: 인터페이스에 선언되지만 구현 객체가 가지고 있는 인스턴스 메소드를 말한다. 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해 사용된다.
- 정적 메소드: 디폴트 메소드와는 달리 객체가 없어도 인터페이스만으로 호출이 가능하다.
인터페이스의 사용 이유
개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있다.
개발 코드 측면에서 코드의 변경 없이 실행 내용과 리턴 값을 다양화할 수 있다.
추상 클래스와 인터페이스의 차이
추상 클래스
추상 클래스를 상속받아서 기능을 사용하고 확장한다.(extends 사용)
ex) 상속 관계에서 하위 클래스 메소드를 특징에 맞게 확장해서 사용할 수 있다.
인터페이스
구현 객체들의 동일한 동작을 보장하기 위해서 사용된다.(Implements 사용)
ex) 자신의 기능에 맞게 인터페이스의 메소드를 정의하여 구현할 수 있다.
참고) 이것이 자바다, 한빛미디어
'BACK-END > JAVA' 카테고리의 다른 글
toCharArray() (0) | 2022.12.24 |
---|---|
indexOf() (0) | 2022.12.23 |