추상클래스 ( abstract )
- 미완성 설계도. ( 미완성 메서드를 갖고 있는 클래스 )
- 다른 클래스에 도움을 주기 위한 것.
- 인스턴스 생성 불가
- 상속을 통해 추상메서드를 완성해야 인스턴스 생성이 가능하다
추상 클래스의 작성
- 여러 클래스에 공통적으로 사용할 수 있는 추상 클래스 바로 작성하거나 기존 클래스의 공통부분을 뽑아서 추상 클래스를 만든다
- 추상 클래스를 상속받는다
- 추상 메서드의 구현부 { }를 작성한다
- 완성된 설계도 → 객체 생성이 가능하게 된다
- 상속 계층도에서 내려갈수록 기능과 멤버가 추가되어 구체화의 정도가 심해지고 올라갈수록 추상화의 정도가 심해진다
추상 클래스의 장점
- 설계도를 쉽게 작성
- 코드 중복 제거
- 코드 관리가 용이
추상메서드 ( abstract 리턴타입 메서드이름 () ; )
- 미완성 메서드
- 선언부만 작성하고 구현부 { 몸통 } 이 없는 메서드
- 공통적으로 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 ( 자손마다 몸통이 다를 경우 )
- 추상메서드를 하나라도 구현하지 않으면 여전히 미완성
- 필수적인 기능이라서 강제성이 있다
인터페이스 ( interface )
- 추상메서드의 집합체
- 구현된 것이 전혀 없는 기본 설계도. ( 알맹이 없는 껍데기라고 표현할 수 있다 )
- 모든 멤버가 public 이다
추상클래스와 인터페이스의 차이점
- 추상클래스 : 추상메서드를 가진 일반 클래스
- 인터페이스 : 추상메서드’만’ 가지고 있다. 두개의 공통점을 추상메서드를 갖고 있다는 점.
- 추상메서드 빼고 구현된 것이 아무것도 없다고도 할 수 있다
인터페이스 작성
interface 인터페이스이름 {
public static final 타입 상수이름 = 값 ; // 상수
public abstract 메서드이름(매개변수 목록) ; // 추상메서드
}
- 모든 멤버가 public , class 대신 interface
- public , static , final , abstract 생략이 가능하다
인터페이스의 상속
- 인터페이스 조상은 인터페이스만 가능하다 ( Object가 조상이 아님.)
- 다중상속 구현가능 ( 추상메서드는 충돌해도 문제가 없음. )
인터페이스 구현 ( 인터페이스에 정의된 추상메서드를 완성하는 것 )
- 인터페이스 상속을 받으려면 상속에서 사용하던 extends가 아닌 implements를 사용한다
class 클래스이름 implements 인터페이스이름 {
( 인터페이스에 정의된 추상메서드를 모두 구현해야한다 )
}
- 인터페이스의 일부만 구현하는 경우 , 클래스앞에 abstract를 붙여서 추상클래스로 선언해야 한다.
- 추상클래스와 인터페이스 둘 다 추상메서드를 가진다는 공통점이 있지만, 인터페이스는 iv를 가질 수 없다.
인터페이스를 이용한 다형성
- 인터페이스 타입의 참조변수로 인터페이스를 구현한 클래스의 인스턴스 참조 가능
- 인터페이스를 메서드의 매개변수 타입으로 지정가능
- 인터페이스를 메서드의 리턴타입으로 지정가능
- 안맞으면 형변환 ( 이 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 의미 )
인터페이스 장점
- 두 대상(객체) 간의 ‘연결, 대화, 소통’을 돕는 ‘중간역할’을 한다
- 기계와 사람이 쓰는 언어가 다르기 때문에 사람이 직접 기계를 다루는게 쉽지않다.
- 개발시간 단축
- 표준화가 가능하다
- 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
- 독립적인 프로그래밍이 가능하다
- 변경에 유리한 설계 가능
- 선언과 구현 분리
'Java > 자바의정석' 카테고리의 다른 글
Java_날짜와 시간 & 형식화 (0) | 2023.08.06 |
---|---|
JAVA_java.lang패키지 , 유용한 클래스 정리 (자바의정석 9장) (0) | 2023.08.02 |
JAVA_예외처리 정리 (자바의정석 8장) (0) | 2023.07.26 |
JAVA _객체지향언어 개념 -2- (자바의정석 7장) (0) | 2023.07.17 |
JAVA _객체지향언어 개념 -1- (자바의 정석 6장) (0) | 2023.07.16 |