공부일지/Java

[JAVA] 추상클래스와 인터페이스

박수빈98 2024. 6. 19. 10:07

추상이란?

실체들 간에 공통되는 특성을 추출한 것

새 사자 고양이 -> 동물

사과 딸기 귤 -> 과일

 

추상 클래스(Abstract Class)

하나 이상의 추상 클래스(구현 되지 않은 메서드)를 포함하는 클래스

인스턴스화 될 수 없다, 상속 받은 하위 클래스가 추상 메서드를 구현해야 인스턴스화 가능

추상클래스는 왜 쓰는가?

상속 계층에서 자식 멤버의 이름을 통일할 수 있다.

실체 클래스 작성 시 시간절약 가능하다.

실체 클래스 설계 구격을 만들 수 있다.

 

추상클래스는 어떻게 사용하는가

abstract 키워드 사용 하위는 extends로 상속 받고 추상 메서드 구현 후 사용

추상 메서드 1개 이상 사용 + 실체 메서드 포함 가능 + 정적 메서드 포함 가능

필드(속성) 포함 가능

생성자 소멸자 포함 가능(하위에서 super()로 접근)

하위 클래스는 단 하나의 추상 클래스만 상속가능

 

인터페이스

클래스가 구현해야 하는 메서드의 집합을 정의, 모든 메서드는 추상메서드이며, 구현X

인터페이스를 통해 동일한 규격을 가지게 할 수 있다.

 

인터페이스는 어떻게 사용하는가

interface 키워드를 통해 사용

모든 멤버 변수: public static final -> 모든 필드는 상수로 사용해야한다.

모든 메서드(디폴트, 정적 제외): public abstract -> 추상메서드로

디폴트 메서드 포함가능: 구현 제공 -> 객체 생성 후 사용가능

정적 메서드 포함가능: -> 인터페이스로 직접 호출, 구현한 모든 클래스가 공유하는 메서드

 

클래스는 복수의 인터페이스 상속이 가능하다.

class 자식 extends 추상클 implements 인터페이스1, 인터페이스2 {}

 

 

추상 클래스, 인터페이스 비교

구분 추상 클래스 인터페이스
목적 클래스의 공통적인 동작을 정의하고 상속받아 재사용하기 위해 사용 클래스가 구현해야 하는 동작을 명시적으로 규약(Contract)하기 위해 사용
키워드 abstract interface
메서드 추상 메서드와 구체 메서드 모두 포함 가능 디폴트 메서드와 정적 메서드 외에는 구체 메서드 포함 불가
변수 인스턴스 변수와 정적 변수 포함 가능 상수(public, static, final)만 포함
상속 단일 상속만 가능 (클래스 다중 상속 불가) 다중 상속 가능
구현 서브 클래스에서 extends 키워드 사용 클래스에서 implements 키워드 사용
생성자 생성자를 가질 수 있음 생성자를 가질 수 없음
사용 용도 클래스 간의 공통된 행동이나 상태를 정의하기 위해 사용 클래스가 반드시 구현해야 하는 메서드를 정의하기 위해 사용
접근 제한자 메서드와 변수에 다양한 접근 제한자 사용 가능 인터페이스의 메서드는 기본적으로 public (디폴트 메서드 포함)
다형성 제한된 다형성 지원 (단일 상속) 더 유연한 다형성 지원 (다중 상속)
추가 가능 기능 자바 8부터 디폴트 메서드와 정적 메서드 포함 가능 자바 8부터 디폴트 메서드와 정적 메서드 포함 가능

 

 

이 둘 모두 객체지향의 중요한 부분인 느슨한 결합, 다형성, 의존성 주입을 도와준다.

아직 이런 부분이 와닿진 않아 일단 정리만 해봐야겠다.

다음 포스팅으로..