티스토리 뷰
|
자바 언어에는 여러 가지 구현을 허영하는 자료형을 만드는 방법이 두 가지 포함되어 있다.
1. 인터페이스 (interface)
2. 추상 클래스 (abstract class)
인터페이스와 추상 클래스의 분명한 차이
=> 추상 클래스는 구현된 메서드를 포함할 수 있지만 인터페이스는 구현된 메서드를 포함할 수 없다.
=> 추상 클래스가 규정하는 자료형을 구현하기 위해서는 추상 클래스를 반드시 상속 받아야 한다.
=> 인터페이스는 클래스 계층에 속할 필요가 없다.
인터페이스는 믹스인(mixin)을 정의하는 데 이상적이다.
믹스인 = 주 자료형 이외에 추가로 구현할 수 있는 자료형으로, 어떤 선택적 기능을 제공한다는 사실을 선언하기 위해 쓰인다.
ex) Comparable은 어떤 클래스가 자기 객체는 다른 객체와의 비교 결과에 따른 순서를 갖는다고 선언할 때 쓰는 믹스인 인터페이스 이다.
추상 클래스는 가질 수 있는 상위 클래스가 하나뿐이기 때문에 클래스 계층에 믹스인을 넣기 좋은 곳이 없다.
인터페이스는 비 계층적인 자료형 프레임워크를 만들 수 있도록 한다.
가수를 표현하는 인터페이스와 작곡가를 표현하는 인터페이스가 있다.
가수 가운데는 작곡가인 사람 도 있다.
아무 문제없이 표현할 수 있다.
추상 클래스를 자료형 정의 수단으로 사용했을 때 만족해야 하는 심각한 제약사항들을 따르지 않아도 추상 클래스를 구현할 수 있도록 돕는다는 것이 골격 구현 클래스의 이점이다.
다양한 구현을 허용하는 자료형을 추상 클래스로 정의하면 인터페이스보다 나은 점이 한 가지 있는데, 인터페이스 보다는 추상 클래스가 발전시키기 쉽다 는 것이다.
다음 릴리스에 새로운 메서드를 추가하고 싶다면, 적당한 기본 구현 코드를 담은 메서드를 언제든 추가할 수 있고 해당 추상 클래스를 계승하는 모든 클래스는 즉시 새로운 메스드를 사용할 수 있다.
public 으로 공개된 인터페이스는 수정이 거의 불가능 하기 때문에 신중해야 한다.
공개된 인터페이스를 구현한 클래스들이 있기 때문에 공개된 인터페이스를 수정할 경우 클라이언트 코드를 깨뜨리게 된다.
요약 : 인터페이스는 다양한 구현이 가능한 자료형을 정의하는 가장 좋은 방법이다.
: 유연하고 강력한 API를 만드는 것보다 개선이 쉬운 API를 만드는 것이 중요한 경우는 예외다.
'JAVA > Effective Java' 카테고리의 다른 글
규칙20 태그 달린 클래스 대신 클래스 계층을 활용해라 (0) | 2018.12.19 |
---|---|
규칙19 인터페이스는 자료형을 정의할 때만 사용하라 (0) | 2018.12.19 |
규칙17 계승을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 계승을 금지하라 (0) | 2018.12.19 |
규칙16 상속하는 대신 구상하라 (0) | 2018.12.19 |
규칙15 변경 가능성을 최소화하라 (0) | 2018.12.19 |
- Total
- Today
- Yesterday
- msyql-connector-java
- Flux
- reative
- aurora
- ResultSet
- spring cloud gateway
- ConcurrentHashMap
- notify()
- notifyAll()
- GlobalFilter
- getBoolean
- RoutePredication
- dynamodb
- AbstractMethodError
- reactor
- RouteDefinition
- custom config data convertion
- circurit breaker
- rate limit
- N+1
- MariaDB
- Seperate Chaining
- router
- mariadb-connector-j
- HashMap
- referencedColumnName
- DyanomoDB
- Lazy
- wait()
- mariada-connector
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |