일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스터디완료
- CC2023
- 제이펍
- 스터디
- 맛있는디자인스터디11기
- 6주차후기
- 생성형AI
- 맛있는디자인
- 혼공JS
- 혼공단
- Doit점프투파이썬
- 맛있는디자인스터디13기
- 혼공파
- 혼공자
- 혼공분석
- 전면개정2판
- 진짜쓰는일러스트레이터
- Doit파이썬스터디
- 프리미어프로
- 혼공C
- 애프터이펙트
- 후기
- 3주차후기
- 혼공
- 혼공머신
- 챌린지
- 혼공학습단
- 맛있는디자인스터디12기
- CS2023
- 회고
- Today
- Total
애독자's 공부방
[혼공자] 4주차 _ 혼자 공부하는 자바(개정판) 본문
혼공단 - 혼공자, 혼자 공부하는 자바(개정판)
■ 공부한 내용
# | 진도 | 기본 숙제(필수) | 추가 숙제(선택) |
4주차 (7/22 ~ 7/28) |
Chapter 07 | 클래스의 타입 변환에는 어떤 것이 있는지 정리하고 공유하기 | p.389 (07-3) 확인 문제 3번을 풀고 풀이 과정 설명하기 |
□ Chapter 07
▷ 07-1
- 상속: 부모 클래스의 필드와 메소드를 자식 클래스에서 사용할 수 있도록 함
- 메소드 재정의: 부모 메소드를 자식 클래스에서 다시 정의
- final 클래스: final로 선언된 클래스는 부모 클래스로 사용 불가
- final 메소드: final로 선언된 메소드는 자식 클래스에서 재정의 불가
▷ 07-2
- 클래스 타입 변환: 다른 클래스 타입으로 객체를 대입
- 자식 타입 변환: 자식 객체를 부모 타입 변수에 대입할 때 자동으로 진행
- 강제 타입 변환: 자식 객체가 부모 타입으로 변환된 상태에서 다시 원래의 자식 타입으로 변환하고자 할 때 캐스팅() 연산자를 사용해서 진행
- instanceof 연산자: 객체가 어떤 타입인지 조사할 때 사용 (주로 강제 타입 변환 전에 변환이 가능한지 조사)
- 다형성: 객체 사용 방법은 동일하지만 실행결과가 다양하게 나오는 성질
. 구현하는 기술: 메소드 재정의와 타입 변환
→ 자식 객체가 재정의된 메소드를 가지고 있을 경우, 부모 타입으로 자동 타입 변환 후에 메소드를 호출하면 재정의된 자식 메소드가 호출되면서 다양한 실행결과 생성
▷ 07-3
- 추상 클래스: 클래스들의 공통적인 필드와 메소드를 추출해서 선언한 클래스
- 추상 메소드: 추상 클래스에서만 선언할 수 있고, 메소드의 선언부만 있는 메소드 (자식 클래스에서 재정의되어 실행 내용을 결정해야 함)
■ 기본 숙제
- 클래스의 타입 변환에는 어떤 것이 있는지 정리하고 공유하기
1) 자동 타입 변환: 자연스럽게 일어나는 형변환으로, 명시적인 코드 없이도 부모 클래스 타입 객체를 자식 클래스 변수에 대입할 수 있습니다. 물을 유리 잔에 담는 것처럼 자연스럽게 형태가 변하는 과정입니다.
- 코드 간결성 향상: 명시적인 형변환 코드가 필요 없어 코드가 간결하고 읽기 쉽습니다.
- 명확성 증진: 변환 의도를 명확하게 전달하여 코드 이해도를 높입니다.
class Animal { } // 부모 클래스
class Dog extends Animal { } // 자식 클래스
Animal animal = new Dog(); // 자동 형변환 발생 (Dog 객체가 animal 변수에 담김)
2) 강제 타입 변환: () 연산자를 사용하여 자식 클래스 타입 객체를 부모 클래스 변수에 대입하거나, 객체의 실제 타입과 다른 타입으로 변환하는 경우에 사용합니다. 강제로 물을 좁은 병에 붓는 것과 같습니다.
- 업캐스팅: 자식 클래스 타입 객체를 부모 클래스 타입 변수로 변환합니다. 큰 병에 작은 물을 담는 것과 같습니다.
. 다형성 구현: 부모 클래스 메서드를 자식 클래스 객체를 통해 호출할 수 있도록 합니다.
. 코드 재사용성 향상: 부모 클래스 타입 변수를 사용하여 다양한 자식 클래스 객체를 처리할 수 있습니다.
Dog dog = new Dog();
Animal animal = (Animal) dog; // 업캐스팅 수행 (Dog 객체를 animal 변수에 담음)
- 다운캐스팅: 부모 클래스 타입 객체를 자식 클래스 타입 변수로 변환합니다. 큰 병에 담긴 물을 작은 컵에 붓는 것과 같습니다. 실제 객체 타입이 변환하려는 타입과 일치하지 않으면 오류(ClassCastException)가 발생합니다.
. 특정 자식 클래스의 메서드 호출 가능: 다운캐스팅을 통해 자식 클래스의 고유 메서드를 호출할 수 있습니다.
Animal animal = new Dog();
if (animal instanceof Dog) { // instanceof 연산자로 타입 확인
Dog realDog = (Dog) animal; // 다운캐스팅 수행 (실제 타입이 Dog인지 확인 후 변환)
realDog.bark(); // Dog 클래스의 bark() 메서드 호출 가능
} else {
System.out.println("해당 동물은 Dog가 아닙니다.");
}
■ 추가 숙제(선택)
- p.389 (07-3) 확인 문제 3번을 풀고 풀이 과정 설명하기
. 추상 클래스는 실체 클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해놓는데, 실체 클래스의 멤버(필드/메소드)를 통일하는데 목적이 있습니다. 추상 클래스 설계 시 하위 클래스가 반드시 실행 내용을 채우도록 강제하고 싶은 메소드가 있을 경우 해당 메소드를 추상 메소드로 선언합니다. 자식 클래스는 반드시 추상 메소드를 재정의해서 실행 내용을 작성해야 하는데, 그렇지 않으면 컴파일 에러가 발생합니다.
. 문제를 보면 HttpServletExample의 main 메소드에서 LoginServlet과 FileDownloadServlet 객체를 차례대로 method 메소드에 전달하고 있는데, method는 HttpServlet의 service 메소드를 호출하도록 구성되어 있습니다. HttpServlet은 추상 클래스로 선언되어 있으며 service는 추상 메소드로 선언되어 있기에, 각 하위 클래스인 LoginServlet과 FileDownloadServlet은 자식 클래스로서 HttpServlet를 상속받으며, 반드시 추상 메소드인 service를 재정의해서 실행 내용을 작성해야 합니다. 따라서 LoginServlet과 FileDownloadServlet은 다음과 같이 작성합니다.
package sec03.extra;
public class LoginServlet extends HttpServlet{
@Override
public void service() {
System.out.println("로그인 합니다.");
}
}
package sec03.extra;
public class FileDownloadServlet extends HttpServlet {
@Override
public void service() {
System.out.println("파일 다운로드 합니다.");
}
}
'Java > 혼공학습단 12기' 카테고리의 다른 글
[혼공자] 6주차 _ 혼자 공부하는 자바(개정판) (0) | 2024.08.11 |
---|---|
[혼공자] 5주차 _ 혼자 공부하는 자바(개정판) (0) | 2024.08.04 |
[혼공자] 3주차 _ 혼자 공부하는 자바(개정판) (0) | 2024.07.15 |
[혼공자] 2주차 _ 혼자 공부하는 자바(개정판) (0) | 2024.07.08 |
[혼공자] 1주차 _ 혼자 공부하는 자바(개정판) (0) | 2024.07.02 |