본문 바로가기

패스트캠퍼스 환급 챌린지

[패스트캠퍼스 수강 후기] {자바 인강} 100% 환급 챌린지 {12} 회차 미션

1. 하위 클래스가 생성되는 과정

캐스팅이란 무엇일까?

캐스팅(casting)이란 타입을 변환하는 것을 말하며 형변환이라고도 한다. 자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다.

이번 글에서는 자식 클래스가 부모 클래스의 타입으로 캐스팅되는 업캐스팅과 반대로 부모 클래스가 자식 클래스의 타입으로 캐스팅되는 다운캐스팅에 대해서 알아본다. 시작하기에 앞서 부모 클래스인 상속 관계의 상위 클래스를 수퍼 클래스, 그리고 자식 클래스인 하위 클래스를 서브 클래스라고 정의한다.

 

업캐스팅

자바에서 서브 클래스는 수퍼 클래스의 모든 특성을 상속받는다. 그렇기 때문에 서브 클래스는 수퍼 클래스로 취급될 수 있다. 여기서 업캐스팅(Upcasting)이란 서브 클래스의 객체가 수퍼 클래스 타입으로 형변환되는 것을 말한다.

즉, 수퍼 클래스 레퍼런스 변수가 서브 클래스로 객체화된 인스턴스를 가리킬 수 있게 된다. 더 쉽게 풀어서 예시를 들어보면 사람은 생물이다라고 생각하면 된다. 여기서 사람은 서브 클래스이고 생물은 수퍼 클래스다.

 

업캐스팅을 하게되면 객체 내에 있는 모든 멤버에 접근할 수 없다. 오직 수퍼 클래스의 멤버에만 접근이 가능하다. 이는 멤버 필드(field)뿐만 아니라 메서드(method)에도 동일하게 적용된다.

다운캐스팅

다운캐스팅(Downcasting)은 자신의 고유한 특성을 잃은 서브 클래스의 객체를 다시 복구 시켜주는 것을 말한다. 그러니까 업캐스팅된 것을 다시 원상태로 돌리는 것을 말한다.

 업캐스팅과 다른 점은 명시적으로 타입을 지정해야 한다는 점이다. 그리고 업캐스팅이 선행이 되어야 한다. 다운캐스팅을 하면서 형변환할 대상을 지정했지만 무분별한 다운캐스팅은 컴파일 시점에는 오류가 발생하지 않아도 런타임 오류를 발생시킬 가능성이 있다.

출처: madplay.github.io/post/java-upcasting-and-downcasting

 

자바 업캐스팅 다운캐스팅

자바에서 업캐스팅(Upcasting)과 다운캐스팅(Downcasting)이란 무엇일까?

madplay.github.io

 

2. 하위 클래스에서 메서드 재정의 하기: 오버라이딩

 

메소드 오버라이딩(method overriding)

앞서 배운 오버로딩(overloading)이란 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것이었습니다.

오버라이딩(overriding)이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것이라고 할 수 있습니다.

 

자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속받습니다.

이렇게 상속받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있습니다.

즉, 메소드 오버라이딩이란 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것을 의미합니다.


오버라이딩의 조건

자바에서 메소드를 오버라이딩하기 위한 조건은 다음과 같습니다.

 

1. 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 합니다.

    하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있습니다.

2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없습니다

3. 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없습니다.


메소드 오버라이딩

자바에서는 메소드 오버라이딩을 통해 상속받은 부모 클래스의 메소드를 자식 클래스에서 직접 재정의할 수 있습니다.

출처: www.tcpschool.com/java/java_inheritance_overriding

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 

 

올인원 패키지 : JAVA 웹 개발 마스터👉https://bit.ly/35aoeAW