-
추상 클래스의 개념, 인터페이스와의 차이점Java 2023. 12. 31. 20:54
클래스가 설계도라면, 추상 클래스는 미완성된 설계도이다.
- abstract 키워드를 사용하여 추상 클래스를 선언할 수 있다.
- 추상 클래스는 추상 메서드를 포함할 수 있다. (일반적인 메서드 또한 포함할 수 있다.)
- 추상 메서드가 없어도 추상 클래스로 선언할 수는 있다.
- 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있다.
- 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있다.
추상 메서드
- abstract 키워들르 사용하여 추상 메서드를 선언할 수 있다.
- 추상 메서드는 일반 메서드와는 다르게 블록{} 이 없다
- 즉, 정의만 할 뿐, 실행 내용은 가지고 있지 않다.
추상 클래스 상속
- 마찬가지로 extends 키워드를 사용하여 상속된다
- 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되야 한다.
내용이 그렇게 많지 않아 따로 정리할 생각은 없었는데,
생각보다 구체적인 활용법이 떠오르질 않아 다시한번 정리한다.
객체지향에서 상속에 의미는 자식클래스들의 공통적인 필드와 메서드를 추출하여
부모클래스에서 선언하고, 자식클래스는 부모 클래스의 필드와 메서드를 상속받아
그대로 사용하거나 상황에 맞게 Overriding 하는 것으로 코드의 중복을 제거하겠다는 것이다.
하지만 자식 클래스의 메서드 명은 같으나 구체적인 동작은 전혀 다를때,
그 클래스를 추상 클래스로 만들고, 해당 메서드 또한 추상 메서드로 만든다.
위 내용을 요약하자면, 그저 평소에 만들던 부모 클래스에 추상 메서드를 추가하는 것 뿐이다.사실 어차피 자식 클래스에서 전부 코드를 짜야한다면,
추상 메서드를 굳이 사용해야하는 이유가 뭔지 의문이 들 수 있다.
그것은 아래서 설명할 인터페이스를 사용하는 이유와 일맥상통한다.
인터페이스와의 차이점
클래스를 상속하는 이유와 크게 다를 것 없는 추상 클래스는, 결국 자식 클래스가 기능을 이용, 확장하기 위해서 존재한다.
반면 인터페이스는 해당 인터페이스를 구현한 객체들에 대한 동일한 사용방법과 동작을 보장하기 위해 존재한다.
어떤 객체가 특정 인터페이스를 구현했다면, 그 객체는 인터페이스의 기능을 모두 갖추고 있음을 보장한다.
그리고 인터페이스를 통해 객체를 제어할 수 있음을 보장하는 것이다.(추상 클래스가 추상 메서드를 사용하는 이유도 이와 같지만, 부모 클래스의 역할을 함께 하는 것이 결정적인 차이)
클래스는 다중 상속이 불가능하지만, 인터페이스는 복수의 implements 가 가능한 것도 위 내용에서 알 수 있다.
자식클래스는, 다중 상속을 받은 클래스들이 같은 이름의 메서드가 존재한다면 그 중 어느 것을 선택할지 애매해진다.
이것을 '다중 상속의 모호성' 이라고 한다.
하지만 인터페이스는 메서드 명이 같다면 양쪽다 똑같은 껍질임에 불과하므로 무엇을 고르든 상관 없는 것이다.'Java' 카테고리의 다른 글
Java 9~17 까지의 변화 정리 (0) 2024.07.03 인터페이스의 개념과 특징 (0) 2023.12.31 for-each문을 향상된 for문이라고 부르는 이유 (5) 2023.12.30 객체, 클래스, 인스턴스의 개념과 분류 (0) 2023.12.29 복습하며 새로 알게 된 내용 (1) 2023.12.04