[Java] 메소드 오버라이딩 (다형성)
▶ 메소드 오버라이딩(Method Overriding)
- 슈퍼 클래스의 메소드를 서브 클래스에서 재정의 하는 것
- 서브 클래스에서, 슈퍼 클래스의 메소드 중복 작성
- 슈퍼 클래스의 메소드 무력화, 항상 서브 클래스에 오버라이딩한 메소드가 실행하도록 보장됨
- 메소드 무시하기, 덮어쓰기로 번역되기도 함
- 동적 바인딩 발생 (서브 클래스에 오버라이딩된 메소드가 무조건 실행되는 동적 바인딩)
● 오버라이딩 조건
- 슈퍼 클래스 메소드의 원형(메소드 이름, 인자 타입 및 개수, 리턴 타입) 동일하게 작성해야함
▷ 서브 클래스 객체와 오버라이딩된 메소드 호출(오버라이딩한 메소드가 실행됨을 보장)
▶ 바인딩
- 컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것
- 프로그램 내에서 변수, 배열, 라벨, 절차 등의 명칭, 즉 식별자가 그 대상인 메모리 주소 또는 실제값으로 배정되는 것
- 함수를 호출하는 부분에서 실제 함수가 위치한 메모리를 연결하는 것도 바인딩
- 구체적인 값을 할당하는 각각의 과정을 바인딩 ex) int num = 123;
▶ 정적 바인딩
- 실행 시간 전에 일어남
- 원시 프로그램의 컴파일링 또는 링크 시에 확정되는 바인딩
- 컴파일 시간에 결정된 함수가 단순히 호출
▶ 동적 바인딩
- 실행하는 동안 호출될 함수가 결정되며 레퍼런스가 가리키는 객체에 따라 호출되는 함수가 유동적인 상태
- 실행 시간에 일어남
- 오버라이딩된 함수가 무조건 호출
- 오버라이딩한 서브 클래스의 함수를 찾아 실행
- 실행 시간 바인딩(run-time-binding) 혹은 늦은 바인딩(late binding)이라고도 함
▶ 오버라이딩의 목적, 다형성 실현
- 오버라이딩으로 다형성 실현
- 하나의 인터페이스(같은 이름)에 서로 다른 내용 구현
- 슈퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 새로 구현
ex) 서브 클래스에서 각각 목적에 맞게 다르게 구현
Line 클래스에서 draw()는 선을 그리는 메소드
Circle 클래스에서 draw()는 원을 그리는 메소드
Rect 클래스에서 draw()는 사각형을 그리는 메소드
예제) 메소드 오버라이딩으로 다형성 실현
▷예제 실행과정
▷ 동적 바인딩 - 오버라이딩된 메소드 호출
▷ super 키워드로 슈퍼 클래스의 멤버 접근
● super.슈퍼 클래스의 멤버
▶ 오버로딩(Overloading) vs 오버라이딩(Overriding)