다중 인터페이스 / 디폴트 메서드 / 중첩 클래스 / 익명객체 / 예외 처리
2022 / 9 / 19 월
- 다중 인터페이스
- 디폴트 메서드
- 중첩 클래스
- 익명 객체
- 예외 처리
✔ 다중 인터페이스
다중 인터페이스를 구현할 경우, 구현 클래스는 모든 인터페이스의 추상 메소드에 대해 실체 메소드를 작성해야 한다.
Extended Interfaces에는 부모 인터페이스가 들어간다. ( Add 로 부모인터페이스 추가하자! )
단일 상속
1. class 자식 클래스 extends 부모 클래스 { }
다중 상속
1. interface 자식 인터페이스 extends 부모 인터페이스1, 부모인터페이스 2 { }
2. class 자식 클래스 implements 부모 인터페이스1, 부모인터페이스 2 { }
✔ 디폴트 메서드
인터페이스에서 선언되지만, 바로 사용할 수는 없다.
WHY? 추상메소드가 아닌 인스턴스 메소드이므로 구현 객체가 있어야 인터페이스에서 사용할 수 있다.
디폴트 메서드의 필요성
- 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위함
✔ 중첩클래스
중첩클래스?
- 클래스 멤버로 선언된 클래스
선언 위치에 따른 분류 | 선언 위치 | ||
멤버 클래스 | 인스턴스 멤버 클래스 | class A { class B { ...} } |
A 객체를 생성해야만 사용가능한 B 중첩 클래스 |
정적 멤버 클래스 | class A { static class B { ...} } |
A 클래스로 바로 접근 할 수 있는 B 중첩 클래스 |
|
로컬 클래스 | class A { coid method() { class B { ...} } } |
method( ) 가 실행할 때만 사용가능한 B 중첩 클래스 |
중첩클래스
1) 인스턴스 클래스 단, static 멤버 사용못함
public class B {
B() {System.out.println("B객체가 생성됨");}
int field1;
void method1() {}
// static 멤버추가작업 못함.
//static int field2;
//static void method2() {};
}
2) 정적 클래스 모든 멤버 사용가능 ( 인스턴스, static )
static class C {
C() {System.out.println("C객체가 생성됨");}
int field1;
static int field2;
void method1() {}
static void method2() {};
}
3) 로컬 클래스. 메소드 내부에 정의한 클래스
메소드는 호출에 의해 바로 실행된다.
void method() {
1. 로컬클래스 정의
class D {
D() {System.out.println("D객체가 생성됨");}
int field1;
void method1() {}
// static 사용못함
//static int field1;
//static void method2() {};
}
2. 호출(사용)
D d = new D();
d.field1 = 3;
d.method1();
System.out.println(d.field1);
위와 같이 멤버 클래스를 생성하고 컴파일하면 바이트 코트 파일이 별도로 각각 생성된다.
A $ B . class
A = 바깥 클래스
B = 멤버 클래스
A $1 D. class
A = 바깥 클래스
D = 로컬 클래스
✔ 익명 객체
익명 객체?
- 이름이 없는 객체를 뜻한다.
- 단독으로 생성이 불가하며 클래스를 상속하거나, 인터페이스를 구현해야만 생성할 수 있다.
익명 객체의 사용 위치
- 필드의 초기값, 로컬 변수의 초기값, 매개변수의 매개 값으로 대입
- UI이벤트 처리 객체나, 스레드 객체를 간편하게 생성할 목적으로도 활용된다.
익명 구현 객체 생성
인터페이스 타입으로 필드나 변수를 선언하고, 구현 객체를 초기값으로 대입하는 경우
1. 구현 클래스를 선언
2. new 연산자를 이용해서 구현 객체 생성
3. 필드 또는 로컬 변수에 대입!
✔ 예외 처리
오류의 종류
1. 에러 Error
하드웨어의 잘못된 동작 또는 고장으로 인한 오류
에러 발생 시 프로그램 종료, 정상 실행 상태로 돌아갈 수 없음
2. 예외 Exception
사용자의 잘못된 조작 또는 잘못된 코딩으로 인한 오류
예외 발생시 프로그램 종료
예외 처리를 추가하면 정상 실행 상태로 돌아갈 수 있다.
예외의 종류
1. 일반 예외 Exception // 컴파일러 체크 예외
예외 처리 코드가 없으면 컴파일 오류 발생
2. 실행 예외 RuntimeException
예외 처리 코드를 생략해도 컴파일이 되는 예외
🔔 자바 프로그램에서 자주 발생되는 실행 예외




예외 처리 코드
예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드
1. 일반 예외
예외 발생 가능성이 있는 코드를 발견하면, 컴파일 오류를 발생시켜
개발자가 예외 처리 코드를 작성하도록 요구
2. 실행 예외
컴파일 오류를 발생시키지 않기에 예외 처리 코드를 개발자가 직접 작성해야한다.
try - catch - finally 블록을 주로 활용한다.
try : 예외 발생 코드 위치 / 예외 발생 없이 정상 실행하면 catch 블록 코드는 실행하지 않는다.
catch : 예외 처리 코드 실행
finally : 예외 발생 여부와 상관없이 항상 실행할 내용이 있을 경우에 작성 ( 생략 가능 )