추상클래스와 인터페이스 차이에 대해
서론
임마 둘은 먼가 하는 건 비슷한데 막상 꼬집으려고 하니까 말문이 막힘
그래서 다시 정리할 겸 찾아보려고 함
추상 클래스와 인터페이스
- 자바에서 다형성을 구현하기 위한 개념이며 객체지향의 핵심 요소
- 결국 추상 메서드를 구현하는 것이 목적이다.
추상 메서드 | 인터페이스 | |
변수 종류 | 제한없음 | static final : 상서문 가능 |
정의 | 하나 이상의 추상 메서드를 포함하는 클래스 | 오직 추상 메서드와 상수만을 가짐 |
접근 제어자 | 제한 없음 | public만 가능 |
다중 상속 | 불가 | 가능 |
의미 | is - a : ~이다 ex) 사람은 동물이다 |
has - a : ~를 할 수 있다. ex) 사람은 말할 수 있다. |
사용 | 상속을 받아 기능을 확장 공통 속성 및 메서드를 가지는 클래스를 정의 미완성 설계도 : 자신의 기능을 하위로 확장 시켜서 설계도를 점점 완성시킴 |
구현한 클래스의 동일한 동작을 보장 상속받는 클래스가 어떤 메서드를 구현해야하는지 정의 기본 설계도 : 메서드 기능을 대충 파악할 수 있고 개발자가 구현을 함 |
공통점 | 인스턴스화 할 수 없음 : 다만 다형성은 가능 A a = new B() 추상 메서드를 가지고 있으며 상속받은 클래스는 그 추상 메서드를 반드시 구현해야함 |
1) 추상 클래스를 쓸 때
- 공통 메서드나 필드가 중복되는 경우 통합을 위해 사용
- 요구사항과 함께 구현 세부 정보 일부 기능만 지정
- 상속할 각 객체들의 공통점(변수, 메서드)을 찾아 추상화한 것 : 클래스와 의미있는 연관 관계를 구축 즉 상속에 대한 계층 구조가 명확할 때 쓰자
- 일반 변수나 일반 메서드도 존재 가능 굳이 오버라이딩 안 해도 되는 거라 편리 다만 추상메서드는 다 구현해야함
2) 인터페이스란?
- 클래스가 어떤 메서드를 구현해야하는지 공통된 동작을 정의하는데 사용
- 메서드 형태만 서로 공유해서 구현하는 경우나 필드 말고 메서드만 쓰고 싶을 때 사용하자
- 클래스와 별도로 구현 객체가 같은 동작을 하는 것 보장하는 것에 초점을 둠
인터페이스의 존재 이유
※ 그냥 추상 클래스에다가 여러 추상 메서드 정의한 다음 이거 쓰면 인터페이스 굳이 필요없지 않냐?
- 자바가 다중상속이 안 되니까 인터페이스로 기능별 나눠서 다중 구현을 하여 명확하게 기능을 정의한다.
- 추상 메서드만 선언해서 쓸 거면 인터페이스를 쓰고 , 일반 메서드나 필드도 필요하면 추상 클래스를 쓰자
- 인터페이스든 추상 클래스든 상속받은 넘은 그 안에 추상 메서드를 다 구현해야함
- 보통 인터페이스를 많이 쓰는데 이는 인터페이스는 메서드 선언과 내용만 설계해두면 얼추 무슨 기능인지 예상이 되니까 다른 사람들과 페어 코딩을 할 수 있다
결론
- 개발할 때 좀 공통적인 부분을 가지는 클래스는 상속으로 묶고, 기능 같은 걸 규정하고 싶을 때는 인터페이스를 쓰자
참고
https://alecture.blogspot.com/2011/05/abstract-class-interface.html
자바의 추상클래스(abstract class)와 인터페이스(interface)
자바의 상속 개념을 공부할때 빠지지 않고 등장하는 것이 바로 오늘 배울 추상클래스(abstract class)와 인터페이스(interface)다. 무슨 공통점이 있는지 무슨 차이점이 있는지 말도 애매모호하고 서로
alecture.blogspot.com
☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해
인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번
inpa.tistory.com