
20230324
오류 – 예외, 오류
+ 7장에 대한 미완성 연구
1⃣ 컴파일 오류
번역: 문법 검사, 구문 검사
최적화 – 성능 향상
생략된 코드 추가
2⃣ 런타임 오류(실행 오류) – 로그 덤프
오류: 치명적 오류 진짜 치명적 – 답이 없는 상태..
예외 : 덜 치명적인 오류 예외 : 필요한 처리 – 사용자 오류
런타임 예외: 선택 처리 – 프로그래밍 오류
3⃣ 논리적 오류(TDD) – 실행되지만 다르게 동작함
4⃣ 예외 처리
try – catch : 직접 처리
예외 선언: 예외 메시지
난독화: 예외 무시
try – catch , 예외 선언 예외 발생
7장 연구
다형성
두 클래스가 서로 상속 관계, 즉 조상과 자손 관계인 경우,
자손 클래스의 인스턴스를 조상 유형의 참조 변수로 참조하는 것이 가능합니다.
class Tv {
boolean power;
int channel;
String color;
void power() { power = !power; }
void channelup() { ++channel; }
void channeldown () { --channel; }
}
class SmartTv extends Tv {
boolean netflix;
void netflix() { netflix = !netflix ; }
}
Tv t = new Tv ();
SmartTv stv = new SmartTv();
// 조상클래스 참조변수로 자손 클래스 인스턴스 참조하기
Tv t = new SmartTv();
// 다만 SmartTv의 인스턴스중에서 Tv에서 상속받지 못한 멤버인
// netflix 와 netflix() 는 사용 할수 없다
// t.netflix; t.netflix() 사용 불가!
SmartTv stv = new Tv (); // 에러
참조 변수의 유형은 인스턴스 유형과 일치하지만 일치하지 않아야 합니다.
상속 관계에서 조상 유형인 참조 변수와 자손 유형의 차이점은 사용할 수 있는 요소의 수가 다르다는 것입니다.
조상 유형 인스턴스는 자손 유형 참조 변수로 사용할 수 없습니다!
참조 변수 유형의 변환
상속 관계에 있는 클래스 사이에서만 사용 가능
자식 타입 참조 변수 → 선행 타입 참조 변수 : 타입 변환 생략 가능
조상형 참조변수 → 후손형 참조변수 : 형변환 생략 불가
Tv t = new Tv ();
SmartTv stv = new SmartTv();
// 자손타입 참조변수 에서 조상타입의 참조변수로 형 변환하기
t = stv ;
// 조상타입 참조변수를 자손타입 참조변수로 형 변환하기
stv = (SmartTv)t ;
* 자동 타입 변환은 어디있나요 자동 타입 변환이 안되는 곳이 있다면 수동으로 변환하는게 편하지 않나요?
업캐스팅이 뭐야… 다운캐스팅이 뭐야… 그냥 둘 다 하고 싶어…
SmartTv stv = new SmartTv();
t = (Tv)stv;
stv = (SmartTv)t;
FireEngine f = new FireEngine();
Car c = (Car)f;
FireEngine f2 = (FireEngine)Car;
연산자의 인스턴스
참조 변수를 캐스팅하기 전에 가능한지 확인하는 데 사용됩니다.
주로 조건문에 사용되며 true를 반환합니다.
if ( c instanceof FireEngine ){ // if( 참조변수 instance 타입 )
FireEngine fe = (FireEngine)c; // 타입 참조변수 = 참조변수
}
FireEngine f = new FireEngine();
System.out.println(f instanceof Object);
Object obj = (Object)f;
System.out.println(f instanceof Car);
Car car = (Car)f;