6. 다형성
- 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것.
- 클래스 extends (하나만 상속가능)
- 인터페이스 implements (여러 개 적을 수 있음)
- 인터페이스 : 미완성 메소드와 모든 클래스에서 공용으로 사용할 상수들을 한데 묶어놓은 추상전용 클래스
클래스로부터 상속받을 수 없고 같은 인터페이스끼리만 상속이 가능
*기본설계도.
- 인터페이스 특징
1. 모든 인터페이스의 메소드는 묵시적으로 public abstract 이다.
2. 필드는 묵시적으로 public static final 이다.
3. 객체 생성은 하지 못하지만, 참조형 타입으로서는 사용 가능하다.
* 같은 인터페이스끼리는 상속 가능함.
- 인터페이스 장점
1. 개발시간을 단축할 수 있다.
2. 변경에 유리한 유연한 설계가 가능하다.
3. 표준화가 가능하다.
- 다운캐스팅 : 부모클래스를 자식클래스 형으로 형변환
- 추상클래스 : 미완성 클래스. 추상메소드를 포함한 클래스(일반필드 + 일반메소드 + [추상메소드])
-> 추상메소드를 가진 클래스는 반드시 추상클래스로 명시해야함.
-> 미완성 클래스이기 때문에 new라는 연산자 통해 생성 불가능
-> 단, 레퍼런스(참조형 변수타입)으로는 사용 가능
-> 몸통부({ })가 구현되어 있지 않은 메소드
-> 추상클래스를 상속받은 자식 클래스에서 반드시 오버라이딩 해야함
- 메소드 사용의 통일성 확보 목적. 표준화된 틀을 제공할 목적으로 사용.
- 미완성된 추상메소드가 있다는 것은 해당 클래스 또한 미완성 클래스라는 것.
*미완성 설계도. 상속을 통해서 자손 클래스에서 완성하도록 유도하는 것.
*상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없음.
- 추상클래스와 인터페이스 비교
특징 | 추상클래스 | 인터페이스 |
상속 | 단일 상속 | 다중 상속 |
키워드 | Extends | Implements |
abstract메소드 | 0개 이상 존재 | 모든 메소드가 abstract |
Abstract | 명시적으로 abstract 사용 | 묵시적으로 abstract |
가질 수 있는 것 | 일반 필드(변수 + 메소드) + 추상메소드 |
Only 상수 필드, 추상메소드 |
사용의도 | Is A : ~이다 | Has A : ~을 할 수 있는 |
*추상클래스 사용 시기 : 상속 관계를 쭉 타고 올라갔을 때 같은 조상클래스를 상속하는데
기능까지 완벽히 똑같은 기능이 필요한 경우
*인터페이스 사용 시기 : 상속 관계를 쭉 타고 올라갔을 때 다른 조상클래스를 상속하는데
같은 기능이 필요할 경우 인터페이스 사용
- 바인딩 : 프로그램 구성 요소의 성격을 결정해주는 것.
함수를 호출하는 부분에 함수가 위치한 메모리 번지로 연결시켜주는 것.
https://secretroute.tistory.com/entry/140819
- 정적 바인딩 : 컴파일 시간에 변수의 크기를 정할 수 있는 것
-> 컴파일 시간에 많은 정보가 결정되므로 실행 효율이 높음.
- 동적 바인딩 : 프로그램이 실행되어야 메모리에 크기가 얼마나 할당되는지 알 수 있는 것
-> 런타임에 자유롭게 성격이 바뀌므로 적응성이 높음.
- 바인딩 성립요건 : 상속 관계로 이루어져 다형성이 적용된 경우, 메소드 오버라이딩이 되어 있으면
정적으로 바인딩 된 메소드 코드보다 오버라이딩 된 메소드 코드를 우선적으로 수행
'Java' 카테고리의 다른 글
자바 요약 정리 - 객체배열 (0) | 2021.07.12 |
---|---|
자바 요약 정리 - 배열 (0) | 2021.07.08 |
자바 요약 정리 - 컬렉션 (0) | 2021.07.08 |
자바 요약 정리 - API (0) | 2021.07.06 |
자바 요약 정리 - 상속 (0) | 2021.07.06 |
자바 요약 정리 - 객체 (0) | 2021.07.06 |
자바 요약 정리 - 제어문 (0) | 2021.07.06 |
자바 요약 정리 - 연산자 (0) | 2021.07.06 |