티스토리 뷰
(오랜만에 글을 쓴다. 최근에는 노션에 익숙해지느라 티스토리를 좀 간과했다😥)
인터페이스와 추상클래스는 자바로 개발을 하면 한번씩은 들어본 단어일 것이다.
둘의 느낌이 비슷해서 이번에 공부하면서 차이점을 알아보았다.
인터페이스와 추상클래스의 차이
인터페이스 : implements(구현)에 초점. 인터페이스에 정의된 메소드들을 각 클래스의 목적에 맞게 기능을 구현하기 위해
추상클래스 : extends(상속)에 초점. 추상 클래스의 기능을 하위 클래스로 확장하기 위해
추상클래스
- 중복 멤버 통합. 인터페이스는 static final 상수만 정의할 수 있는 차이가 있다.
- 클래스끼리 명확한 계층 구조가 필요할 때 사용 → 클래스와 의미있는 연관관계 구축
- 다형성 : 미리 논리적인 클래스 상속 구조를 만들어 놓고 사용
인터페이스
- 자유로운 타입 묶음을 통해 추상화를 이루게 한다.
[ 최상위 추상 클래스 : Creature
Creature을 상속 받는 추상 클래스 Animal, Fish
Animal을 상속받는 클래스 Parrot, Tiger, People
Fish를 상속받는 클래스 Whale
Swimmable 인터페이스를 구현하는 People, Whale 클래스]
- 만약 People과 Whale 클래스에서 수행해야 하는 메소드가 생기면
- Creature 클래스에 추상 메소드를 추가해줘야 한다.(추상화 원칙을 따르기 위해)
- 근데 그러면 메소드 기능이 필요 없는 Parrot, Tiger에서도 추상 메소드를 구현해야 한다.
- 물론 메소드 선언만 하고 아무런 코드를 작성하지 않아도 되지만 이는 객체 지향 설계에 위반되며 좋지 않은 코드가 된다.
- 그래서 인터페이스로 Swimmable을 선언하는 것이다.
abstract class Creature { } abstract class Animal extends Creature { } interface Swimmable { } class Tiger extends Animal { } class People extends Animal implements Swimmable { }
- 다형성 : 필요할 때마다 구현해서 자유롭게 붙였다 땐다.
- 부모, 자식 클래스와 같이 논리적으로 관련이 있는 클래스가 아닌 별개의 클래스들을 인터페이스로 타입을 통합하여 형제 관계처럼 다룰 수 있다.
- 상속 관계에 얽매이지 않고 구현하면 다형성을 만족할 수 있다.
인터페이스 + 추상클래스
둘을 같이 사용하는 경우도 많다.
추상 클래스의 중복 멤버 통합 + 인터페이스의 다중 상속
Interface - Abstract - Concrete class 패턴
인터페이스는 중복된 필드를 해결해주지 못한다.(static final 상수만 가능하므로)
→ 인터페이스와 구체 클래스 사이에 추상 클래스를 하나 두고 공통되는 부분을 모으자
→ 추상클래스가 인터페이스를 구현하는 것이다.
→ 구체클래스에서 추상클래스를 상속받고, 구현하고자 하는 인터페이스의 메소드 부분을 구체화 해준다.
참고 자료
https://inpa.tistory.com/entry/JAVA-☕-인터페이스-vs-추상클래스-차이점-완벽-이해하기#추상클래스의_다형성_이용_설계
'java' 카테고리의 다른 글
일급 컬렉션 (0) | 2024.11.23 |
---|---|
자바의 Checked Exception VS Unchecked Exception (1) | 2024.11.21 |
상속과 메모리 구조 (0) | 2023.12.21 |
자바 main 메소드는 왜 static일까? (0) | 2023.12.19 |
자바 메모리 구조 (0) | 2023.12.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 이진탐색
- StreamAPI
- 유효성 검사
- @NoArgsConstructor
- Java
- checkedException
- @Value
- ddl-auto
- null
- Optional
- 오블완
- JPA
- Thymeleaf
- NPE
- 일급컬렉션
- id생성전략
- upperBound
- @ConfigurationProperties
- 메인메소드
- @Spring
- Spring
- 백준
- 동등성
- springboot
- N+1문제
- 생성자
- 티스토리챌린지
- lowerBound
- 자바
- uncheckedException
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함