- 백기선-JAVA/STUDY/WEEK62021년 01월 07일 01시 27분 37초에 업로드 된 글입니다.작성자: jCurve728x90반응형
목표
자바의 상속에 대해 학습하세요.
학습할 것 (필수)
- 자바 상속의 특징
- super 키워드
- 메소드 오버라이딩
- 다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
- 추상 클래스
- final 키워드
- Object 클래스
자바 상속의 특징
객체지향 프로그래밍에서 상속이란 부모 역할의 상위 객체와 자식 역할의 하위 객체가 있을 때 , 상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해주는 것이다.
상속을 하게되면 하위 객체는 쉽고 빨리 설계가 가능하고 이미 개발된 객체를 재사용하기 때문에 반복된 코드의 중복을 줄여준다.
상속은 상위 객체의 수정으로 모든 하위 객체들의 수정 효과를 가져오므로 유지 보수 시간을 최소화 시켜준다.
특징으로는
- 다중 상속을 지원하지 않는다. extends 뒤에는 하나의 부모 클래스만 올 수 있다.
- 상속의 횟수 제한이 없다.
- 자바에서 최상위 계층 부모 클래스는 java.lang.Object이다. 즉 Object class는 super class를 가지지 않는다.
- 상속을 할 때 상위 클래스는 물려줄 특성이 풍부하면 좋고 반대로 인터페이스는 구현을 강제할 메서드의 개수가 적을수록 좋다.
상속의 단점
- 상속을 사용하면 기능 추가/ 변경시에 예외나 버그가 발생하게 되면 발생지를 예측하기 힘들다. (상속이 복잡할 수록 더욱 힘들다.)
- 불필요한 기능까지 상속이된다.
- 캡슐화 원칙을 위반한다.
- 상위 클래스의 구현이 하위 클래스에게 노출되는 상속은 캡슐화를 깨뜨린다. 캡슐화가 깨짐으로서 하위 클래스가 상위 클래스에게 강하게 결합, 의존하게 되고 강한 결합, 의존은 변화에 유연하게 대처하기 어려워진다.
상속하는 방법
Yesterday class를 선언하고 이를 Today라는 class에서 상속 받아 보자
Super 키워드
위의 코드처럼 Yesterday 클래스의 생성자를 하위 클래스인 Today에서 상속 받은 후
Today의 생성자로서 super class의 생성자를 호출 하였다.
메소드 오버라이딩
위의 코드에서 Yesterday 클래스의 sumYesterday 메서드를 하위 클래스인 Today가 상속받은 후 오버라이딩하는 부분이 에너테이션에 아래 나타나있다.
이처럼 오버라이딩이란 상속 관계에서 부모 클래스의 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것이다.
오버라이딩은 메소드의 동작만을 재정의 하므로 , 메소드의 선언부는 기존 메소드와 동일해야 하며 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경 가능하다.
부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경 불가하다.
부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.
다이나믹 메소드 디스패치
오버라이딩된 메서드에 대한 호출이 컴파일 타임이 아닌 런타임에 해석되는 프로세스이다.
해당 메소드가 참조에 의해 호출될 시 참조하는 객체 유형에 따라 실행할 메소드 버전을 판별한다. (런타임 다형성으로 알려져있다)
추상 클래스
추상 클래스에서 추상이라는 단어의 의미는 구체적인 실체라기보다는 실체들의 공통되는 특성을 가지고 있는 추상적인 것 이라고 볼 수 있다.
객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 하고 , 이러한 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다.
추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다.
추상 클래스의 용도는 다음과 같다
- 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적
- 실체 클래스를 작성할 때 시간을 절약
추상 클래스 선언시 abstract 키워드를 붙여야한다.
new 연산자로 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 때 super()를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.
추상 클래스에 일반 메소드를 구현한다면 사용자에 따라 해당 메소드를 구현할 수도 있고, 안 할 수도 있다.
final 키워드
final 키워드는 클래스, 필드, 메소드 선언 시에 사용할 수 있다.
final키워드는 해당 선언이 최종 상태이고 더이상 수정이 불가함을 뜻한다.
final 키워드가 클래스 앞에 붙게되면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다. 즉 final 클래스는 부모 클래스가 될 수 없다.
final키워드가 메소드 앞에 붙게되면 이 메소드는 오버라이딩 할 수 없는 메소드가 된다.
즉 부모 클래스를 상속해서 자식 클래스에서 재정의할 수 없는 것이다.
Object 클래스
자바에서 Object 클래스는 모든 클래스의 부모 클래스가 되는 클래스이다.
자바의 모든 클래스는 Object 클랫의 모든 필드와 메소드를 상속받는다.
Object 클래스의 상속을 명시하지 않아도 Object 클래스의 모든 멤버를 자유롭게 사용이 가능하다.
유틸 메서드, 스레드 관련 메서드 등등을 제공한다.
반응형'JAVA' 카테고리의 다른 글
백기선-JAVA STUDY/WEEK8 (0) 2021.01.29 백기선 - JAVA STUDY/WEEK7 (0) 2021.01.15 백기선-JAVA STUDY/WEEK5 (0) 2020.12.19 백기선-JAVA STUDY/WEEK4 (0) 2020.12.19 백기선-JAVA STUDY/WEEK3 (0) 2020.12.19 댓글