카테고리 없음

[혼공자] 4주차 (혼공학습단 12기)

chaemin07 2024. 7. 26. 05:55

혼공학습단 12기는 7/01일부터 8/18일까지 진행하는 스터디 활동입니다.

 

★ 이번주 공부할 내용

# 진도 기본 숙제(필수) 추가 숙제(선택)
4주차
(7/22 ~ 7/28)
Chapter 07 클래스의 타입 변환에는 어떤 것이 있는지 정리하고 공유하기 p.367 07-3 확인 문제 3번을 풀고 풀이 과정 설명하기

 

🙋‍♂️Q&A: 신용권 저자님의 네이버 카페
💻유튜브 강의: 👉전체 강의 목록

 

혼자 공부하는 자바(개정판)

『혼자 공부하는 자바』가 더욱 풍성한 내용을 담아 돌아왔습니다! 개정판은 기존의 자바 8 & 11 버전은 물론, 최신 버전인 자바 21까지 다룹니다. 자바 21 버전의 강화된 언어 기능을 담은 총 260개

www.youtube.com

이번주 공부할 내용은

· Chapter07 상속

파트입니다!!

 

먼저 클래스의 타입변환에 대해 알기 위해서는 상속과 메소드 오버라이딩에 대해 알아봅시다.

 

 

상속(Inheritance)이란?

명사 

1 상속받은 재산, 유산; 상속

2 (과거·선대로부터 물려받는) 유산, 유전(되는 것)

뜻을 가집니다.

객체 지향 프로그래밍에서 또한 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있습니다.

부모 클래스를 "상위 클래스"라 부르고, 자식 클래스를 "하위 클래스" 또는 "파생 클래스"라고 부릅니다.

class 자식클래스 extends 부모클래스{
    // Field(필드)
    // Constructor(생성자)
    // Method(메소드)
}

자바 상속 예시

 

※ 자바에서 상속은 다음의 특징이 있습니다

①  여러 개의 부모 클래스를 상속할 수 없어 하나의 부모 클래스만 상속할 수 있습니다

        → 자바에서는 다중 상속을 지원하지 않습니다.

② 접근 제한자인 private와 default에 따라 상속 대상이 결정됩니다.

        → 같은 패키지 내에 부모와 자식이 존재한다면 상관없지만, 서로 다른 패키지에 부모와 자식이 존재한다면 default 접근 제한을 갖는 필드(멤버 변수)와 메소드는 상속 대상에서 제외됩니다.

        →  private 접근 제한은 갖는 필드와 메소드 또한 상속 대상에서 제외됩니다.

 

새롭게 자식 클래스를 만들어 new 자식클래스() 객체를 생성하게 되면 자식이라는 인스턴스 속에는 "부모로부터 물려받은 필드와 메소드가 있는 인스턴스"와 "자식클래스에 정의되어 있는 인스턴스"가 생성됩니다.

 

부모 클래스가 큰 틀로 추상적이게 정의되어 있다면 자식 클래스에서 재정의(Overriding)하여 사용할 수 있습니다.

재정의 하는 방법은 간단하게 오버라이딩하려는 부모 클래스의 메소드와 자식 클래스의 메소드의

이름, 매개변수, 반환형식이 같아야 합니다.

 

부모 클래스의 메소드를 상속받으면서 자식 클래스가 메소드 재정의하는 경우가 발생하게 되는데

이때 메소드 재정의를 하게 되면 새로 생성된 객체는 기존 부모 클래스의 메소드로부터 메소드를 가져오는 것이 아니라

재정의된 자식 클래스의 메소드를 가져와 사용하게 됩니다.

 

■ 기본 숙제 

클래스의 타입 변환에는 업캐스팅(Upcasting)과 다운캐스팅(Downcasting)이 있습니다.

 

1. 업캐스팅(Upcasting) 은 자바에서 객체의 서브클래스타입(자식 클래스)을 슈퍼클래스타입(부모클래스)으로 변환하는 과정을 말합니다. 업캐스팅의 경우 명시적인 캐스트 연산이 없이 생략할 수 있습니다.

단, 업캐스팅의 경우 부모에겐 없는 자식의 기능(메소드)을 호출할 수는 없습니다. - 컴파일 오류 발생 

 

2. 다운캐스팅( DownCasting)은 업캐스팅과 달리 명시적으로 캐스팅이 필요합니다.

부모 클래스의 객체를 자식 클래스 타입으로 변환하는 것으로, 객체를 추상적인 것에서 구체적(부모 -> 자식)으로 변환하여 자식 클래스에서 정의된 메소드나 필드에 접근할 수 있게 합니다.

단, 객체가 자식 클래스 타입이 아닌 경우에 - 런타임에 ClassCastException 발생

이런 오류를 막기 위해 "instanceof" 연산자를 이용하여 해당 객체가 특정 클래스의 인스턴스인지 확인할 수 있습니다.

다운캐스팅은 매우 강력하지만, 잘못 사용할 경우 프로그램의 안전성을 해칠 수 있으므로, 항상 다운캐스팅이 필요한지 확인하고, 예외 처리(try-catch)와 타입 검사를 통해 안정성을 확보해야 합니다.

 

쉽게 말해 업캐스팅은 부모타입으로 변경, 다운 캐스팅은 자식 타입으로 변경하는 것입니다.

 

■ 추가 숙제

P367 확인문제 3번

#3. 추상 클래스를 자식 클래스에서 재정의하는 문제입니다.

추상클래스로 정의된 HttpServlet 클래스를 부모클래스로 갖는 LoginServlet 클래스와 FileDownloadServlet 클래스를 만들고 각각 재정의를 해야 합니다.

추상 클래스인 HttpServlet과 추상 메소드인 service()

 

public class HttpServletExample {
    public static void main(String[] args) {
        method(new LoginServlet()); // 로그인합니다.
        method(new FildDownloadServlet()); // 파일 다운로드합니다.
    }
    public static void method(HttpServlet servlet) {
        servlet.service();
    }
}

문제의 요구사항에 맞춰 재정의를 해줍니다!!

LoginServlet클래스 메소드 재정의

메소드 오버라이딩을 하면 추상 클래스의 추상 메소드를 구현했다는 Implements 아이콘이 나옵니다.

오버라이딩을 할 때는 @Override 어노테이션을 생략해도 좋으나, 붙인다면 메소드가 재정의된 것인지 컴파일러가 확인해 주기 때문에 실수를 줄일 수 있습니다.

어노테이션을 추가한 FildDownloadServlet클래스 메소드 재정의
HttpServletExample 실행 결과

 

이번주도 공부하시느라 다들 수고가 많으십니다!!

다음 주는 여름 방학 ㅎㅎ 한 주 쉬고 더 파이팅입니다!!

같이 파이팅 해요!!!!