본문 바로가기
혼공학습단

[혼공단12기] 혼자 공부하는 자바(개정판) 4주차(Chapter 07)

by #FF0000 2024. 7. 22.

 

 

 

 

혼자 공부하는 자바 - 예스24

혼자 해도 충분하다! 1:1 과외하듯 배우는 자바 프로그래밍 자습서(자바 21 최신 버전 반영)26명의 베타리더 검증으로, ‘함께 만든’ 입문자 맞춤형 도서『혼자 공부하는 자바』가 더욱 풍성한

www.yes24.com

https://www.yes24.com/Product/Goods/124821050

 


4주차(24.7.22- 7.28) Chapter 07

 

기본미션

▶ 클래스의 타입 변환 정리

 

클래스 타입 변환 : 다른 클래스 타입으로 객체를 대입하는 것

 

자동 타입 변환

: 프로그램 실행 도중에 자동적으로 타입 변환

  •  자식 객체를 부모 타입 변수에 대입 시
  •  자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급

자동 타입 변환이 필요한 이유?

 → 다형성 구현.

 → 필드의 타입을 부모타입으로 선언시 다양한 자식 객체들이 저장,

     필드 사용 결과가 달라 질 수 있음 (필드의 다형성)

부모타입 변수 = 자식타입; // 자동 타입 변환

--EX
Cat cat = new Cat();
Animal animal = cat; // Aninal animal = new Cat(); 가능

 

강제 타입 변환

: 자식 객체가 부모 타입으로 변환된 상태에서 다시 원래의 자식 타입으로 변환하고자 할 때,

  캐스팅() 연산자를 사용해서 강제 타입 변환

자식 타입이 부모 타입으로 자동 타입 변환 시, 부모에 선언된 필드와 메소드만 사용 가능.

(자식에 선언된 필드와 메소드 필요시 강제 타입 변환 필요)

자식타입 변수 = (자식타입) 부모타입; // 부모 타입을 자식 타입으로 변환

-- EX
Parent parent = new Child(); // 자동 타입 변환
Child child = (Child) parent; // 강제 타입 변환

 

 

instanceof

: 매개값의 타입 조사.

메소드 내에서 강제 타입 변환이 필요할 경우  instanceof 연산자로 확인 후 강제 타입 변환 실행

boolean result = 좌항(객체) instanceof 우항(타입)
-- 좌항의 객체가 우항의 인스턴스,
-- 좌항의 객체가 우항의 타입으로 객체가 생성되었다면 true 리턴
-- 그렇지 않을 경우 false 리턴

-- Ex
public void method(Parent parent) {
	if(parent instanceof Child) {
    	Child child = (Child) parent; // Parent 매개 변수가 참조하는 객체가
                                      // Child 인지 조사
    }
}

 

 

 

선택미션

▶ 07-3 확인문제 3번 풀이(p.389)

 

추상 클래스 : 클래스들의 공통적인 필드와 메소드를 추출해서 선언한 클래스

추상 메소드 : 추상 클래스에서만 선언할 수 있고, 메소드의 선언부만 있는 메소드.

                     추상 메소드는 자식 클래스에서 재 정의 되어 실행 내용을 결정

 

 

Q. HttpServlet이라는 추상 클래스가 다음과 같이 선언되어 있습니다.

public abstract class HttpServlet {
	public abstract void service();
}


다음 클래스를 실행하면 "로그인 합니다.", "파일 다운로드 합니다." 가 차례대로 출력되도록

LoginServlet과 FileDownloadServlet 클래스를 선언 해보세요.

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

 

 

 

sol)

-- LoginServlet 클래스 선언
public class LoginServlet extends HttpServlet {
	@Override
	public void service() {
		System.out.println("로그인 합니다.");
	}
}

-- FileDownloadServlet 클래스 선언
public class FileDownloadServlet extends HttpServlet {
	@Override
	public void service() {
		System.out.println("파일 다운로드 합니다.");
	}
}

 

eclipse 실행 화면