학습할 것 (필수)
- 자바 상속의 특징
- super 키워드
- 메서드 오버 라이딩
- 다이내믹 메서드 디스패치 (Dynamic Method Dispatch)
- 추상 클래스
- final 키워드
- Object 클래스
자바 상속의 특징
상속, 즉 일반화는 여러 객체들이 가진 공통된 특성을 부각해 하나의 개념으로 성립시키는 과정이다.
이 과정에서 속성이나 기능의 상속이 수반되어 재사용에 용이하다.
"is a kind of"의 관계가 성립되지 않을 때, 상속을 사용하면 불필요한 속성이나 연산이 함께 상속되는 비효율을 초래한다.
상속의 특징
- class 클래스(자식) extends 클래스(부모)의 방식으로 사용-할 수 있음- 자식은 부모 클래스로부터 메서드와 필드를 물려받아 사용하지만 부모 클래스는 자식 클래스에서 정의한 메 소드나 필드를 사용하지 못함
- 부모 클래스는 여러 자식 클래스에게 상속이 가능함
super 키워드
서브 자식 클래스에서 상위 클래스를 호출할 때 사용됨
상위 클래스의 멤버 변수, 생성자를 뜻함
상속은 생성자를 사용할 경우 상위 클래스의 생성자를 구분하기 위해 super를 써주어야 함
메서드 오버 라이딩
Method Signature( name, paramenter types)
: return type은 메서드 시그니쳐에 포함되지 않는다. 그래서 타입이 다른 메서드를 같은 시그니쳐로 인식함
상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메서드로 다시 정의하는 것을 의미함
1. 오버 라이딩이란 매소드의 동작만을 재정의함, 시그니쳐 타입이 부모에 있는 것과 같아야 함
2. 부모 클래스의 메서드보다 더 큰 범위의 예외를 선언할 수 없음
참고) 오버 라이딩과 혼동하기 쉬운 오버 로딩에 대해 설명을 추가하자면, 오버 로딩은 새로운 메서드를 정의하는 것을 말하고, 오버라이딩은 상속받은 기존의 메소드를 재정의 하는 것이다.
다이내믹 메서드 디스패치(Dynamic Method Dispatch)
정적 디스패치 : 굳이 실행 시점이 아니더라고 컴파일 시점에 어느 메서드로 호출이 일어날 것이 결정되는 것
다이내믹 메서드 디스패치: 컴파일 시점에는 모르지만 런타임 시점에 할당된 object가 무엇인가를 보고 결정하게 되는 것
즉, 런타임 시 결정되는 의존 관계를 다이내믹 메서드 디스패치라고 한다
추상 클래스
추상화라는 개념을 먼저 살펴보자면, 추상적(보편적) 특징을 파악해 각각의 사물을 하나의 집합으로 파악하는 것을 의미한다.
구체적인 개념에 의지하기보단 추상적인 개념으로 객체를 설계할 때 유연한 설계가 가능하다.
예시를 하나 들자면, 인터넷 쇼핑몰 웹을 구상한다고 생각했을 때 쇼핑몰에서 판매하는 Product라는 클래스의 역할은 productName과 price에 대한 정보를 제공하는 것이다. 그런데 Product라는 클래스에 구체적인 정보가 들어있다면 목적과 취지가 흐려지게 되고 클래스가 가진 역할이 흐려지는 결과를 초래한다.
정리하자면, 추상 클래스는 클래스의 역할을 분명히 하기 위한 설계된 클래스로서 abstract키워드를 가지고 있는 메서드는 상속 시 반드시 재정의 해야 한다. 여기서 오버 라이딩을 하면, 같은 기능인데 다른 결과를 초래하는 다형성이 발생한다. 또한 규격에 맞게 소스가 구현되어 있기 때문에 해당 규격에 대한 구현부나 수정하면 손쉽게 수정이 가능하다.
final키워드
the final keyword is used in several contexts to define an entity that can only be assigned once.
by 위키백과
entity : 속성이 바뀌더라도 여전히 같은 것으로 인식되는 객체를 엔티티 -> 고유한 식별자
entity가 한 번만 할당된다는 뜻을 보면,
final이 선언된 메서드는 자식 클래스에서 재정의 하려 할 때 오류가 발생한다.
클래스 구현 시 오버 라이딩을 막고 싶다면 final을 사용하는 게 좋습니다.
변수 선언 시 (원시 타입 변수) , Immutable형식: 한번 선언한 뒤 변하지 않는다.
클래스, 함수, 변수가 변하지 못하도록 의도하고 싶다면 final로 선언하자
Object클래스
"모든 객체의 아버지는 클래스이다!"
필드는 없고 메서드만 11개 존재하는 클래스이다.
자바에서 모든 클래스는 사실 Object를 암시적으로 상속받고 있다. 다시 말해 Object 클래스의 모든 메서드와 변수는 다른 모든 클래스에서 사용이 가능하다.
toString(): 현재 객체의 문자열을 반환한다
boolean equals(): 두 개의 객체가 같은지 비교하여 같으면 true, 같지 않으면 false를 반환함
'Java > Study' 카테고리의 다른 글
[JAVA] 백기선 라이브 스터디 9주차 예외처리 (0) | 2021.01.13 |
---|---|
[JAVA]백기선 라이브 스터디 8주차 (0) | 2021.01.08 |
[Java]백기선 라이브 스터디 7주차 (0) | 2021.01.02 |
[JAVA]백기선 자바 스터디 5주차 과제 (0) | 2020.12.19 |
[Java] 백기선 스터디 4주차 과제 (0) | 2020.12.11 |