일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- removetooltip
- 가상환경
- 속초여행
- 장고
- 자바
- 추상클래스
- JavaScript
- Django
- 남양주맛집
- 포인터
- 코딩독학
- richtext
- FLUTTER
- c언어문자열
- DOM
- python3
- 노마드코더
- 상속
- 컴퓨터과학
- Python
- 강원도속초맛집
- BeautifulSoup
- 정렬알고리즘
- pipenv
- 건대입구맛집
- 부스트코스
- popupmenubutton
- 아스키코드
- 성수동카페
- Today
- Total
YUYANE
Java/ 다형성(polymorphism) 본문
다형성(polymorphism)
1. 의미
poly : 많은, 다양항
morph : (모습이나 형태가) 변하다
=> 즉, 다형성이란 어떤 개체가 다양한 형태로 변할 수 있는 능력
- 어떤 개체 : 부모 클래스형의 변수로 참조 중인 개체
- 다양한 형태 : 실제 개체에 구현된 메서드
Animal animal = new Dog();
animal.shout();
// 실제 개체 자료형인 Dog 클래스에 있는 shout()메서드가 호출된다.
2. 특징
1) 상속은 다형성에 필요한 선수 조건
- 단, 상속 없이 다형성을 지원하는 비주류 OO언어도 있음
2) 많은 사람들이 OOP의 핵심이라 여기는 특징
3) 같은 지시를 내렸는데 다른 종류의 개체가 동작을 달리하는 것
4) 어떤 함수 구현이 실행될지는 프로그램 실행 중에 결정됨
- 늦은 바인딩(late binding) / 동적 바인딩 (dynamic binding) 이라고 함
- 일반적인 함수 호출은 이른 바인딩(early binding, 컴파일 중에 결정됨)
3. 상속
1) 다형성의 혜택을 받으려면 상속 관계가 필요
- 부모 개체에서 함수 시그니처를 선언 (final을 붙이면 자식 클래스에서 오버라이딩 안 됨->이른 바인딩 가능)
- 자식 개채에서 그 함수를 다르게 구현(overriding, 선택사항임)
(- 다형적으로 동작하는 메서드를 가상 메서드(virtual method)라고 한다.
2) 실용적인 용도 : 다른 종류의 개체를 편하게 저장 및 처리 가능
- 부모의 타입을 저장하는 배열에 모든 자식 개체를 저장
- for문 하나로 모든 개체를 순회하며 동일 함수 호출
3) 참고
- 부모의 동작도 유지하면서 오버라이딩 가능
public class Animal {
public void shout() {
System.out.println("나, 동물이다~");
}
}
puclic class Sloth extends Animal {
public void shout() {
System.out.println("날 내버려 둬~");
super.shout();
}
}
Animal animal = new Sloth();
animal.shout();
// 날 내버려 둬~
// 나, 동물이다~
4. 장점
1) 각 자료형의 코드가 클래스 안에 들어가니 캡슐화 높아짐
2) 유지 보수성도 높아짐
3) 새로운 클래스를 추가할 때 클래스 코드만 추가하면 됨
** 이른 바인딩 vs 늦은 바인딩 : 성능편
둘 중에 cpu 최적화가 더 잘 될 가능성이 높은 것은 이른 바인딩이다
- 컴파일러가 실제로 어떤 함수를 호출해야 하는지 앎
- 따라서 컴파일 중에 충분한 시간을 들여 최적화를 할 수 있음
- 실행 중에 이렇게 충분한 시간을 사용할 수 없음
'Programming Languages > JAVA' 카테고리의 다른 글
Java/ Object 클래스와 메서드(toString(), equals(),hashCode()) (0) | 2020.12.23 |
---|---|
Java/ final (0) | 2020.12.22 |
Java/ 상속 vs 컴포지션 (0) | 2020.12.16 |
Java/ 재사용성 (0) | 2020.12.16 |
Java / 중복되는 상태는 지우자 (0) | 2020.12.15 |