728x90

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 클래스

자바의 최상위 클래스이다.

출처 : http://www.tcpschool.com/java/java_api_object

 

Reference

leemoono.tistory.com/20

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

728x90

'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

+ Recent posts