-
[JAVA] interface(인터페이스) 와 abstract class(추상클래스)리뷰노트/Java 2023. 1. 31. 22:47
자바 공부를 하면 언제나 필수적이고 면접 질문으로 자주 나오는 인터페이스와 추상클래스의 대해서 적어보겠습니다.
추상클래스
- abstract로 선언된 추상 클래스는 상속을 위한 클래스기 때문에 객체를 생성할 수 없고 상속을 통해 자식 클래스에서 만들어지도록 유도하는 미완성 설계도 라고 할 수 있습니다.
또한, 다중 상속을 지원하지 않기 때문에 여러 개의 추상 클래스를 상속 할 수 없습니다.
abstract class 추상클래스이름 { public abstract void 추상메소드이름1(); public abstract void 추상메소드이름2(); ''' }
- 추상메소드 : 선언부에서 작성되어지고 구현부에서는 작성되지 않은 채로 남겨두는 것이고 상속받는 클래스에 따라서 구현 되는 내용이 달라질 수 있습니다.
public abstract class AbstractClass { // Field private String name; // Constructor public AbstractClass(String name) { this.name = name; } // Method public void method() { }; } public class PersonClass extends AbstractClass { private String address; public PersonClass(String name, String address) { super(name); this.address = address; } }
상속을 통해서 사용하며 자식 클래스의 생성자에서 super()를 사용해서 추상 클래스의 생성자를 호출 및 초기화시킵니다.
인터페이스
다중 상속(구현) 이 가능하고 상수와 추상메소드의 집합이며 일반 메소드, 일반 멤버 변수를 가질 수 없는 특징이 있습니다.
메소드는 public abstract로 선언해야하고 인터페이스는 인스턴스가 존재할 수 없기 때문에 상속받은 구현 객체에서 같은 상태를 보장하기 위해 쓰이기 때문에 멤버변수는 public static final 로 선언합니다. 하지만 컴파일 시 자동으로 생성해 주기 때문에 둘 다 생략 가능합니다.
interface 인터페이스이름 { public abstract void 메소드1(); int 메소드2(); // 컴파일 시 자동 생성으로 public abstract 생략가능 ''' }
공통점
추상메소드, 인터페이스 둘 다 메소드를 선언만 할 수 있고 구현 내용이 없습니다. 그리고 new를 통해서 객체를 생성할 수 없고 선언된 추상 메소드를 구현 하도록 합니다.
차이점
추상메소드는 인터페이스와 다르게 static, final 이 아닌 publiic protected, private 접근 제어자를 사용할 수 있습니다.
추상클래스는 상속할 객체들의 공통점을 추상화 시켜놓은 것이며, 부모 클래스를 상속하며, 부모 클래스가 가진 기능들을 구현해야하는 경우에 사용됩니다. (부모 기능을 하위로 확장시키는 개념으로 볼 수 있습니다)
인터페이스는 다른 부모 클래스를 상속하더라도 같은 기능이 필요한 경우 사용됩니다. 그리고 구성된 모든 기능들을 재정의 해야하는 번거로움이 있습니다.
(자바는 다중 상속을 지원하지 않습니다) 한 개의 클래스만 상속이 가능하기 때문에 클래스의 구분을 추상클래스 상속으로 해결하고 할 수 있는 기능들을 인터페이스로 구현합니다.
'리뷰노트 > Java' 카테고리의 다른 글
[Java]짧게 훑어보는 Java 간단 지식(오버라이딩&오버로딩, 추상클래스, 인터페이스, SOLID-객체지향의 설계원칙) (0) 2023.11.29 [Java]짧게 훑어보는 Java 간단 지식(Java란, 컴파일 과정, JVM, GC, 메모리 영역) (0) 2023.11.21 [Java] String Array -> int Array 로 변환하는 방법 (0) 2022.08.10