이론 정리/java

abstract class와 interface에 관하여

철매존 2022. 4. 6. 22:10
728x90
반응형

abstract class

이름에서 알 수 있듯, 추상 클래스는 선언만 하고 실제 구현부는 작성하지 않은 상태로 남겨둔 클래스이다.

추상 클래스는 다음과 같은 특징을 갖는다.

  • new메소드를 사용하여 객체를 직접 생성할 수 없다.
  • 구현부가 실제로 없기 때문에 자식 클래스에서 구현하게 된다.
    • 그리고, 이 구현은 무조건 이루어져야 한다.
  • 이 메소드 내에는 추상 메소드가 존재하며, 이 메소드를 자식 클래스에서 구현한다.

추상 클래스는 간단히 말하자면 미완성 설계도라고 생각하면 된다.

예를 들어 개, 고양이, 소, 말, 돌고래 라는 동물들이 있는 경우
추상 클래스로 동물을 선언해주면 동물이 갖는 공통의 특성을 아래에서 하나씩 사용할 수 있다.

  • 동물(추상 클래스)
    • 걷기
    • 뛰기
    • 숨쉬기

이 뛰는 방식, 걷는 방식, 숨쉬는 방식 등등을 하나씩 실제로 만들어주면 될 것이다.

이런 식으로 이름정도와 기초적인 틀만 구성해 둔 후, 두발로 걸음, 아가미로 숨쉼…등의 세부 내용은 자식 클래스에서 정의해주는 식이다.

Interface

인터페이스는 추상 클래스의 일종인데, 위의 abstract class보다 추상화 정도가 더 높다.

인터페이스는 다음의 특징을 갖는다.

  • 일반 메소드나 변수를 가질 수 없다.
    • public abstract method만을 갖는다.
    • public static final 변수만을 갖는다.
  • 다중 상속을 받을 수 있다.

인터페이스명은 주로 ~able로 끝나는데, 이는 ~할수 있다 라는 것이다.
이런 이름을 갖는 이유는 인터페이스가 특정 기능을 할 수 있도록 하는 메소드를 제공한다는 것을 알 수 있게 하려는 것이다.

추상클래스와 인터페이스의 비교

먼저 둘의 공통점은

  1. 추상 메소드를 통해 구현하도록 한다.
  2. 인스턴스화의 불가능

이다. 그럼 차이점은 뭘까?
위에 인터페이스에서 설명한 ~able이 실제 사용에서의 차이를 만들어낸다…만들어낸다? 차이가 생긴다?
실제로 둘 간에 기능에서의 차이가 있지만, 사용법의 차이를 알아두는 것이 더 주요할 것이다.

먼저 ~able은 ~을 가능하게 한다는 것이다.
이를 통해 인터페이스의 경우는 서로 크게 관련이 없더라도, 같은 기능을 사용하게 하기 위해서 사용할 수 있다.

인터페이스의 용도

예를 들어 닭, 사과, 물이 있다고 해보자
닭은 동물, 사과는 식물(…?), 물은 액체로 셋 간에는 별다른 공통점이 없다.
하지만 이것들은 먹으면 배를 부르게 할 수 있다!! 는 기능을 구현할 수 있다.

따라서 차이점은

추상클래스와 인터페이스의 차이

  1. 추상 클래스는 같은 부모 클래스를 통해 공통점 위주로 상속받아 사용하고, 인터페이스는 공통점과 관계 없이 동일한 기능을 구현할 때 사용해준다.
  2. 인터페이스는 다중 상속이 가능하다.

정도로 정리할 수 있겠다.

반응형

'이론 정리 > java' 카테고리의 다른 글

Java에서 기본 타입과 참조 타입의 차이  (0) 2022.05.15
List와 Set의 차이점, 활용  (0) 2022.04.06
Java의 Optional 클래스  (0) 2022.04.03
싱글톤(Singleton) 패턴에 관하여  (0) 2022.04.03
필터와 인터셉트  (0) 2022.04.02