-
[JAVA9] 상속비전공자 공부일기/:: JAVA 2020. 3. 18. 18:02
한국기술교육대학교 온라인평생교육원
모던웹개발을 위한 JAVA9 프로그래밍
9회차 수업학습목표
- 상속
- 오버라이딩
- final 클래스
- 추상클래스
- Object 클래스
** 강사님 설명
클래스를 재사용하는 방법은 다음 두 가지가 있다.
1) 상속 (= 클래스 확장)
2) 결합
그 중에 오늘 배울 내용은 '상속'에 관한 것.
슈퍼클래스와 서브클래스
슈퍼클래스 = 부모클래스 = 상속을 해주는 클래스
서브클래스 = 자식클래스 = 상속을 받는 클래스
서브클래스 메소드의 정의와 상속
: 아래 코드블럭과 같이 상속을 하게 되면 슈퍼클래스에 있는 모든 필드와 메소드 등을 가져오는 것이며,
필드나 메소드를 추가하거나 메소드를 오버라이딩(내용변경) 할 수도 있다.
//Manager 클래스를 확장해 Employee 클래스를 만든다 public class Manager extends Employee { 추가된 필드 추가된 메소드 또는 오버라이딩 된 메소드 }
메소드 오버라이딩
: 서브 클래스에서 슈퍼클래스 메소드를 수정해야 할 때
메소드의 이름을 그대로 가져오지만 로직내용을 바꿔서 쓰는 것
Employee 클래스의 몇 가지 기능을 보유하면서 관리자가 어떻게 다른지 명시
public class Manager extends Employee { ... @Override public long getSalary() { return super.getSalary() + bonus; } }
@가 붙은 키워드는 '어노테이션'라고 하며, 생략이 가능하다.
하지만 이 메소드가 오버라이드 되었다고 명확히 알려줄 수 있기 때문에 사용을 권장상속관계: is-a relationship
is-a 관계
: 서브 클래스 객체를 슈퍼클래스 타입 변수에 할당 가능
Employee emp = new Manager(); ---> "Manager is a Employee"
---> 위 코드에서 =을 기준으로 왼쪽-오른쪽 타입이 다르지만 이 관계가 성립되려면, is-a relation이 되어야 한다.
오른쪽의 객체가 왼쪽 타입의 변수에 할당이 된다.
간단히 말하면, 왼쪽이 부모, 오른쪽이 자식이면 할당 가능!
보통 왼쪽이 좀 더 general한 타입, 오른쪽이 좀 더 specific한 타입이 온다.
동적 메소드 조회(Runtime Binding)
: 메소드가 호출될 때 가상머신은 객체의 실제 클래스를 살펴보고 호출
오버라이딩 때문에 생기는 기능이다.
오버라이딩은 부모에 있는 기능을 자식이 상속받으면서 메소드를 새롭게 정의하는 건데,
자바에서는 모든 메소드가 오버라이딩 대상이 될 수 있다.
Employee emp = new Manager(); emp.getSalary(); // 실제 객체인 Manager 클래스의 getSalary 메소드가 호출됨
위 코드에서 emp라는 객체는 타입은 Employee지만 객체는 Manager이다.
따라서 emp.getSalary() 라는 코드에서는 Manager 객체의 getSalary() 메소드가 호출된다.
final 클래스 & final 메소드
클래스 또는 메소드를 final로 선언하게 되면, '상속을 할 수 없다'는 뜻
각각 최종 클래스, 최종 메소드라고 부른다.
- 최종 클래스: 서브 클래스를 만들 수 없음
- 최종 메소드: 서브 클래스에서 오버라이딩 불가
최종 클래스, 최종 메소드는 더 이상 확장될 필요가 없기 때문에
후기 바인딩이 아니라 전기 바인딩이 일어나며, 따라서 전체적으로 속도가 빨라진다.
추상 클래스 & 추상 메소드
구현없는 메소드를 정의해서 서브 클래스에게 메소드 정의를 강제
- 구현이 없는 메소드를 추상 메소드라고 함
- 추상 메소드가 포함된 클래스를 추상 클래스라고 함
- 추상 메소드와 추상 클래스에는 abstract 제어자를 붙임
Object 클래스
자바의 모~든~ 클래스가 상속받는 클래스가 있다.
바로 java.lang.Object 클래스이다.
'비전공자 공부일기 > :: JAVA' 카테고리의 다른 글
[Java] 배열 연습문제 - 짝수만 입력받아 출력하기 (0) 2020.04.14 [Java] 배열 연습문제 - 정수를 여러개 입력받아 순서대로, 거꾸로 출력하기 (0) 2020.04.14 [JAVA9] 객체지향 모델링 심화 (0) 2020.03.11 [JAVA9] 객체지향 모델링 (0) 2020.03.11 [비전공자 눈높이] 자바, 웹+자바 관련 용어 심플정리 (0) 2019.07.02