추상 클래스(abstract class) : 완성되지 못한 채로 남겨진 설계도를 의미하며, 인스턴스는 생성할 수 없다. 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 추상 클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상 메서드를 모두 구현해주어야 한다. 만일 조상으로부터 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상 클래스로 지정해주어야한다.
상속이 자손 클래스를 만드는데 조상 클래스를 사용하는 것이라면, 이와 반대로 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상 클래스를 만드는 것이라고 할 수 있다.
인터페이스 : 일종의 추상클래스로 오직 추상 메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 혀용하지 않는다. 인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 기본 설계도라 할 수 있다.
인터페이스의 작성은
package com.test02;
interface IStudent { public void study();} //표준적인 요소만 디자인
class Student implements IStudent{
public void study() { //
System.out.println("학생이 공부하다.");
}
}
public class Sample02 {
public static void main(String[] args) {
Student stu = new Student();
stu.study();
IStudent a = new Student();
a.study();
}
}
인터페이스는 인터페이스로만 상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러 개의 인터페이스로부터 상속을 받는 것이 가능하다.
인터페이스도 역시 해당 인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있으며, 인터페이스의 타입으로 형변환도 가능하다.
** 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환하는 것을 의미한다.
인터페이스의 장점 : -개발 시간을 단축시킬 수 있다. -표준화가 가능하다. - 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다. -독립적인 프로그래밍이 가능하다.
예외처리 : 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다.
컴파일 에러 : 컴파일 시에 발생하는 에러 / 런타임 에러 : 실행 시에 발생하는 에러 / 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것
에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
Exception클래스들 - 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
RuntimeException - 프로그래머의 실수로 발생하는 예외
예외처리하기 : 정의 - 프로그램 실행시 발생할 수 있는 예외에 대비한 코드를 작성하는 것
목적- 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
try - catch 문 : 하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나 이상의 catch블럭이 올 수 있으며, 이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch 블럭만 수행된다. 발생한 예외의 종류와 일치하는 catch 블럭이 없으면 예외는 처리되지 않는다.
try - catch문에서의 흐름 : try블럭 내에서 예외가 발생한 경우 - 1.발생한 예외와 일치하는 catch블럭이 있는지 확인한다. 2.일치하는 catch 블럭을 찾게 되면, 그 catch 블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리하지 못한다.
try블럭 내에서 예외가 발생하지 않은 경우 - 1.catch블럭을 거치지 않고 전체 try-catch 문을 빠져나가서 수행을 계속한다.
printStacktrace() : 예외발생 당시의 호출스택(call stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
예외 발생시키기 : 키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있다.
1. 먼저, 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음 - Exception e = new Exception("고의로 발생시켰음"); 2. 키워드 throw를 이용해서 예외를 발생시킨다. throw e;
이 2줄의 코드를 한줄로 만들면 -> throw new Exception("고의로 발생키켰음"); 으로 만들 수 있다.
메서드에 예외 선언하기 위해서 throws를 사용해서 여러가지의 예외들을 ','로 구분하여 작성해준다.