[Java_Summarry] 상속, 업캐스팅, instanceof, 오버라이딩, 다형성, 동적 바인딩
CBJH2024. 2. 14.
728x90
반응형
1. 클래스를 다른 패키지에서 사용하고 싶을 때,
default, private 클래스는 다른 패키지에서 사용할 수 없다. import해서 사용할 수도 없다.
final class는 다른 클래스에서 상속받아 사용할 수 없다.
final method는 다른 클래스에서 오버라이딩하여 재정의할 수 없다.
default 클래스를 다른 패키지에서 사용하고 싶다면, 접근 제한자를 public으로 변경하거나 코드 구조를 재조정하는 것이 가장 바람직한 해결책이다.
static은 클래스 최상위 레벨에선 사용할 수 없고, 멤버 변수나 메서드에서만 사용할 수 있다.(static과 final 키워드 사용할 수 있는지 여부가 헷갈리니 주의하자!, 의미는 전혀 다름!!)
2. 업캐스팅(upcasting)
서브 클래스의 객체는
슈퍼 클래스의 멤버를 모두 가지고 있다.
슈퍼 클래스의 객체로 취급할 수 있다.
업캐스팅이란?
서브 클래스 객체를 슈퍼 클래스 타입으로 타입 변환(더 작은 영역으로의 타입 변환)
업캐스팅된 레퍼런스는 객체 내에서 슈퍼 클래스의 멤버만 접근 가능하다.
Object 자료형에 int, boolean, double, String으로 받아서 처리할 때에도 업캐스팅이 일어난다.
업캐스팅 예제
Person p;는 s를 업캐스팅 받아 Person super class만 접근 가능하다.
s를 수정해도 p값이 변한다.
3. instanceof
instanceof는 자바에서 객체의 타입을 확인하기 위해 사용되는 연산자입니다. 주로 객체가 특정 클래스의 인스턴스인지, 혹은 특정 인터페이스를 구현하는지를 검사할 때 사용됩니다. 이 연산자는 런타임에 객체의 실제 타입을 확인하여, 해당 객체가 검사하는 타입의 인스턴스이거나 그 서브클래스의 인스턴스인 경우에 true를 반환합니다. 만약 객체가 해당 타입의 인스턴스가 아니라면 false를 반환합니다.
사용법
instanceof 연산자의 기본 문법은 다음과 같습니다:
객체 instanceof 클래스명
여기서 객체는 검사하고자 하는 인스턴스를, 클래스명은 해당 인스턴스가 속해 있는지 확인하고자 하는 클래스의 이름을 지정합니다.
주의사항
null 체크: instanceof 연산자는 null 값에 대해 항상 false를 반환합니다. 따라서 null인 객체에 대해 instanceof를 사용해도 예외가 발생하지 않습니다.
클래스 계층: 서브클래스의 객체는 슈퍼클래스의 타입으로도 간주됩니다. 따라서 instanceof는 객체가 해당 클래스의 인스턴스이거나, 그 어떤 서브클래스의 인스턴스인지까지 확인할 수 있습니다.
인터페이스: instanceof는 객체가 특정 인터페이스를 구현하는지도 검사할 수 있습니다. 객체가 인터페이스의 구현체인 경우, instanceof는 true를 반환합니다.
활용
instanceof는 주로 타입 캐스팅 전에 객체의 타입을 안전하게 확인할 때 사용됩니다. 타입이 맞지 않는 객체에 대한 캐스팅은 ClassCastException을 발생시킬 수 있기 때문에, instanceof로 미리 검사를 수행함으로써 이러한 예외를 방지할 수 있습니다.
instanceof 연산자의 평가는 변수의 컴파일 타임 타입이 아니라, 런타임 시 변수가 실제로 가리키고 있는 객체의 타입을 기준으로 합니다. 따라서 슈퍼 클래스의 객체 레퍼런스가 서브 클래스를 가리킬 경우(업캐스팅) instanceof는 true를 반환한다.
업캐스팅을 활용한 instanceof 예제 31번줄과 참3 결과를 확인하자!
4. 상속 클래스 오버라이딩
멤버 변수는 오버라이딩 되지 않는다.
멤버 변수는 상속되지만 오버라이드는 되지 않는다.( 자식 클래스에서 같은 이름의 멤버 변수를 선언하게 되면, 부모 클래스의 멤버 변수는 "숨겨지게" 됩니다. 이것을 변수의 "숨김"(Shadowing) 또는 "가리기"(Hiding)라고 합니다.)
오버라이딩은 상속받은 메소드의 구현을 자식 클래스에서 재정의하는 것을 말하며, 이는 메소드에만 해당되는 개념이다.
상속을 통해 '하나의 인터페이스(같은 이름)에 서로 다른 내용 구현'이라는 객체 지향의 다형성을 실현한다.
4.1 오버라이딩 업캐스팅(동적 바인딩)
서브 클래스에서 메소드를 오버라이딩 한 경우 슈퍼클래스에 업캐스팅을 해도 오버라이딩 된 메소드가 호출된다.
댓글