Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

추상 클래스 / 인터페이스 본문

IT/Computer Science

추상 클래스 / 인터페이스

빌드이너프 2023. 1. 16. 10:06

추상 클래스

        • 추상 메서드를 포함하고 있는 클래스를 의미
        • 미구현 추상 메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능
        • 추상메서드(메서드의 내부가 구현되어 있지 않은 메서드) 포함하고 있는 클래스를 의미
        • abstract 클래스나 메서드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것
        • 상속받은 클래스의 기능을 이용하고 확장하는
abstract class 클래스명 {
	abstract 데이터_타입 메서드명();
}

추상 클래스

    • 클래스 내부에 추상 메서드가 하나라도 있다면 클래스 앞에 abstract 키워드를 붙여서 추상 클래스로 만들어 줘야 함
    • 추상 메서드는 상속받은 클래스에서 반드시 구현 되어야 함 -> 추상 클래스에는 final 키워드를 붙일  없음
    • 추상클래스 내부에는 추상메서드 외에 일반 메서드나 변수가 존재함 ->구현된 일반 메서드는 다른 클래스의 메서드와 똑같이 동작함

인터페이스

      • 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법(일종의 추상 클래스)
      • 오직 추상 메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용되지 않음
      • 구현된 것은 아무것도 없고 밑그림만 그려져 있는 기본 설계도
      • 인터페이스를 상속받을 때는 일반 상속에서 사용하는 extends가 아닌 implements 사용
      • 하위 클래스에게 일종의 설계도를 제공
      • 모든 메서드가 추상 메서드로만 구성된 것을 의미
interface 클래스명 {
	데이터_타입 메서드명();
}

인터페이스

  • 상속하는 클래스에서는 인터페이스에 존재하는 모든 추상메서드를 구현해야 함 -> 반드시 상속이 되어야 하기 때문에 인터페이스 역시 final 키워드가 붙을 수 없음

 

구분 설명
추상 클래스 - 객체 인스턴스를 생성하지 않고, 단지 유저 클래스들의 공통된 특징 정의하고, 하나 이상의 추상 메서드와 일반 필드 및 일반 메서드를 포함하는 클래스
- 동일한 부모를 가지는 클래스를 묶는 개념으로 상속을 받아서 기능을 확상시키는 것이 목적
인터페이스 - 기능을 모아놓은 클래스로 추상 메서드와 상수만을 포함하는 추상 클래스
- 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제하는 역할

  추상 클래스 인터페이스
공통점 객체 생성 X
선언만 되어 있고 구현 내용 없음
자식 클래스가 메서드의 구체적인 동작을 구현하도록 책임 위임
차이점 추상 메서드를 자식 클래스가 구체화하여 해당 기능을 확장하는 것이 목적 서로 관련 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능을 구현한 필요가 있는 경우 사용
클래스 O 클래스 X
extends 단일 상속 implement 다중 상속

줄글 정리 간단하게 정리가 안돼서 접은 글로 표기함

더보기

추상 클래스는 추상 메서드를 포함, 추상 메소드는 메소드의 내부가 구현되어 있지 않은 메소드

클래스 내부에 추상 메서드가 하나라도 있다면, 클래스 앞에 abstract를 붙여 추상 클래스로 만듬

추상 메서드는 상속받은 클래스에서 반드시 구현되어야하고 때문에 추상 클래스에는 final가 붙을 수 없음

but! 추상 클래스 내부에서는 추상 메서드 외에 일반 메서드나 변수 존재할 수 있음

이렇게 구현된 메서드는 다른 클래스의 메서드와 동일하게 동작함

-----------------------------------------------------------------------------------------------------------------

추상 클래스는 다른 클래스나 인터페이스를 상속받을 수 있는데, 추상 클래스나 인터페이스를 상속받았을 때 상위 클래스의 추상 메서드를 구현하지 않아도 됨

주의할 점은 추상 클래스를 상속받는 하위 클래스는 이 추상 클래스가 상속받은 상위 클래스의 추상 메서드까지 모두 구현해야 함

 

인터페이스는 모든 메서드가 추상 메서드로만 구성된 것을 의미함, 따라서 상속하는 클래스에서 인터페이스에 존재하는 모든 추상 메서드를 구현해야함

반드시 상속이 되기 때문에 인터페이스 역시 final이 붙을 수 없음

-----------------------------------------------------------------------------------------------------------------

인터페이스가 클래스와 다른 점은 다중 상속이 가능함

다중 상속 받은 하위 클래스는 상속받은 모든 인터페이스를 구현해야하고 모든 상위 인터페이스의 구현체로 사용 가능함

추상 클래스와 인터페이스의 공통점은 하위 클래스에서 구현을 강제하는 추상 메서드를 포함함

 

여기서 추상 메서드가 필요하다면 추상 클래스만 존재하면 되는데 왜 인터페이스가 필요한지 의문이 생길 수 있음

이유는 자바는 다중 상속을 지원하지 않기 때문(이해안간다면 상속을 보고오는 것 추천)

상위 클래스에 같은 이름의 메서드가 있다면 상속받은 하위 클래스에서 그 메서드를 호출했을 때 어떤 메서드가 호출되어야 할지 알수 없게 됨, 이를 다이아몬드 문제라고도 함

따라서 자바에서는 이런 문제를 방지하기위해 애초에 클래스의 다중상속을 금지함

 

하지만 인터페이스에는 모든 클래스가 추상 메서드이기 때문에 같은 이름의 메서드가 존재한다고 해도 메서드는 하위 클래스에서 오버라이드 되어야 하기때문에 다이아몬드 문제에서 자유로움

 

그렇다고 다중상속이 인터페이스의 이유라고 할 수 없음

인터페이스를 상속받은 클래스는 모든 메서드를 재정의해야하고 클래스의 인스턴스는 인터페이스를 통해 다형성을 가질 수 있기 때문, 즉 인터페이스는 하위 클래스에게 일종의 설계도 역할을 함

하위 클래스는 여러 개의 설계도를 가질 수 있고 각각의 설계도에 맞는 구현체를 제공할 수 있다고 생각

 

여기서 추상 클래스의 경우 다중 상속을 할 수 없기 때문에, 하위 클래스는 오직 상속받은 추상 클래스의 기능을 이용하고 확장하는 역할을 하게 됨

 

정리하면 추상클래스는 상속받은 클래스의 기능을 이용, 확장하는 것, 인터페이스는 하위 클래스에게 설계도 제공함

 

 


참고자료

수제비 정보처리기사 실기 2-34, 6-56, 6-59

생활코딩, abstract / 인터페이스

 

 

 

 

 

 

'IT > Computer Science' 카테고리의 다른 글

Process / Thread  (1) 2023.01.18
ORM  (2) 2023.01.17
Git / GitHub  (1) 2023.01.13
Transaction 트랜잭션  (0) 2023.01.12
TCP / UDP  (1) 2023.01.11