[혼공자] 4주차 과제

나봉·2025년 2월 7일
0

13기 혼공자

목록 보기
10/14

4주차 (02.03 ~ 02.09) / chapter07

1. 기본 숙제

1. 자동 타입 변환(업캐스팅 - Upcasting) : 프로그램 실행 도중 자동적으로 타입 변환이 이루어짐

  • 자식은 부모 타입으로 자동으로 변환이 가능

  • 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이라면 자동 타입 변환 가능

  • 부모 클래스에 선언된 필드와 메서드만 접근이 가능
    => but, 메서드가 자식 클래스에서 재정의되었다면 자식 클래스의 메서드가 호출

  • 자식 클래스에서 추가한 메서드나 필드는 접근할 수 없음
    => 이러한 이유로 강제 타입 변환을 사용

자동 타입 변환 예시

class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Dog 객체를 Animal 타입으로 업캐스팅
        Animal animal = new Dog();  // 업캐스팅 (자동)

        animal.sound();  // 멍멍! 재정의된 자식 메서드가 호출
    }
}

2. 강제 타입 변환(다운캐스팅 - Downcasting) : 부모 타입을 자식 타입으로 변환하는 것

  • 자식 타입이 부모 타입으로 자동 타입 변환 후 다시 자식 타입으로 변환할 때 강제 타입 변환 사용 가능
    => 명시적 변환 사용해야 한다.

  • instanceof 연산자 사용 : 강제 타입 변환 하기 전에 객체가 실제로 해당 타입인지 확인

  • 다운캐스팅을 사용하는 이유는 자식 클래스에서만 정의된 메서드나 필드에 접근하기 위해서

강제 타입 변환 예시

class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("멍멍!");
    }

    void fetch() {
        System.out.println("공을 물어옵니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();  // 업캐스팅 (자동)
        
        // 다운캐스팅 전에 타입이 맞는지 확인
        if (animal instanceof Dog) {
            Dog dog = (Dog) animal;  // 다운캐스팅
            dog.fetch();  // 공을 물어옵니다.
        }
    }
}

2. 추가 숙제

[문제 풀이]
HttpServlet클래스는 abstract로 작성된 추상 클래스이며
그 안에 service() 메서드는 abstract로 작성된 추상 메서드이다.
따라서 객체를 만들지 못하고 상속받은 클래스에서 구현해야 한다.

LoginServlet 클래스와 FileDownloadServlet 클래스는 HttpServlet 클래스를 상속하여
service() 메서드를 각 클래스에서 구현하였다.

method(HttpServlet servlet) 메서드는 매개변수로 HttpServlet 타입을 받는다.
LoginServlet와 FileDownloadServlet 는 자동 타입 변환되어 각자의 구현된 service() 메서드를 호출한다.

0개의 댓글

관련 채용 정보