(JAVA) 오류 – 예외, 오류, 7장 연구


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;