Obj. 자바의 상속에 대해 학습.
Todo.
6-1. 자바 상속의 특징
6-2. super 키워드
6-3. 메소드 오버라이딩
6-4. 다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
6-5. 추상 클래스
6-6. final 키워드
6-7. Object 클래스
6-1 자바 상속의 특징
상속이란? 부모 클래스가 가지고 있는 모든 것을 자식 클래스가 물려받아서 같이 공유하고, 확장을 한다.
상속을 하는 이유? 코드를 재사용 하기 편하고, 클래스 간 계층 구조를 분류하고 관리하기 쉬워진다.
부모 클래스를 상위클래스 (Super Class) 또는 기반 클래스(Base Class)
상속 받은 자식 클래스를 하위클래스(Sub Class) 혹은 파생 클래스(derive Class)라 부른다.
자바 상속의 특징
- 다중 상속이 불가능 하다. 단일 상속만 가능하다.
- extend를 이용하여, 상속한다.
- 부모 메소드를 자식 클래스에서 재정의(오버라이딩)이 가능하다. 하지만 부모의 생성자는 상속이 되지 않는다.
- 자바의 최상위에는 java.lang.Object 클래스이며 별도의 상속을 하지 않으면 기본적으로 Object가 상속된다.
- 부모의 private 접근 제한을 갖는 멤버는 상속이 불가능하다.
- 동일한 이름의 변수가 부모 클래스와 자식 클래스에 둘 다 존재할 경우 부모 클래스의 변수는 가려진다.
6-2. super 키워드
Super 키워드는 부모 클래스로부터 상속 받은 이름이 같은 경우, 인스턴스 변수 앞에 this 키워드로 구분 할 수 있었다.
이와 마찬가지로 부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같은 경우에 super키워드를 사용헤 부모 클래스에 접근 할 수 있다.
단 인스턴스 메서드에서는 자신이 속한 인스턴스의 주소가 지역변수로 저장되는데, 그 중 하나가 super이다. 그러므로 static 메서드에서는 사용 될 수 없다.
super() 메소드
-> 부모의 기본 생성자를 호출하는 역할이다. 이를 Constructor chaining 이라고 한다. (반드시 자식 생성자의 첫 줄에 위치함)
생성자의 첫 줄에 위치 해야하며, 생략하면 컴파일러가 자동으로 생성한다.
단 부모 클래스에 기본 생성자가 없고, 매개변수를 갖는 생성자만 있으면 자식 클래스에서 반드시 super(매개변수...)를 명시해야한다.
6-3. 메소드 오버라이딩
메소드를 오버라이딩 하면 자식 객체의 메소드를 호출 시 부모 기능은 숨겨지고 자식이 재정의 한 기능을 실행한다.
부모의 메소드와 동일한 메소드 이름과 매개변수 리스트를 사용 해야한다.
@Override 어노테이션을 사용해도 되고, 하지 않아도 된다.
부모 메소드의 접근 제한자 보다 강한 제한은 사용이 불가능 하다. 하지만 사용하는게 좋음!
6-4. 다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
메소드 디스패치 : 어떤 메소드를 호출할 지 결정하여 실제로 실행시키는 과정을 말한다.
-> 정적 메소드, 동적 메소드 , 더블 디스패치가 있음.
정적 메소드 디스패치
컴파일 시점에서 메소드를 결정하는 과정이다. 컴파일 시점에서 무슨 메소드가 실행 될지 컴파일러가 알고 있음.
동적 메소드 디스패치
컴파일 시점에 메소드를 결정하지 못하고, 실행 할 때 정해지는 것을 의미한다. 개체 생성시 클래스 타입이 정해져 있지 않지만 런타임에 정해져서 메서드를 호출 하는 것이다.
더블 디스패치
디스패치를 두 번 하는 것을 의미한다.
디자인 패턴 중 방문자 패턴이 있다. 이는 알고리즘을 객체 구조에서 분리시켜서 디자인을 한다. 이와 밀접한 관계가 있다. 이는 각 객체의 동작들을 지정하는 패턴이다.
6-5. 추상 클래스
이는 구체적이지 않은 클래스를 의미한다. 공통된 부분으로 묶기에는 적당하지만, 구현을 하지는 않을 클래스를 만들 때 추상 클래스를 이용한다. 이를 상속하면, 추상 메서드를 모두 구현해야만 사용할 수 있다.
실제 클래스의 공동 필드와 메소드 이름을 통일하고, 실체 클래스의 작성 시간을 절약하기 위해 사용한다.
추상클래스는 반드시 하나이상의 추상 메서드를 가지고 있으며, 생성자와 멤버변수, 일반 메서드 모두 가질 수 있다.
자체 인스턴스 생성이 불가능 하다.
6-6. final 키워드
클래스 , 필드, 메소드 선언 시 사용 가능한 키워드 해당 선언이 최종 상태고, 더 이상 수정 될 수 없음을 의미한다.
class 는 상속을 막고, 변수는 재할당을 막고, 메서드는 오버라이딩을 막는다.
final의 사용하면 변하지 않는다고 알고 있는데 대상이 변수가 아니라 객체일 경우에 재 할당이 안될 뿐이다.
6-7. Object 클래스
자바의 최상위 클래스이다.
Reference
docs.oracle.com/javase/tutorial/java/IandI/index.html
github.com/mongzza/java-study/blob/main/study/6%EC%A3%BC%EC%B0%A8.md
'Java > [Whiteship]자바스터디' 카테고리의 다른 글
8주차 과제 : 인터페이스 (0) | 2021.01.19 |
---|---|
7주차 과제 : 패키지 (0) | 2021.01.18 |
5주차 과제 : 클래스 (0) | 2021.01.09 |
4주차 과제 : 제어문 (0) | 2021.01.09 |
3주차 과제 : 연산자 (0) | 2021.01.08 |