728x90
20220919(월)
- 목차
- 인터페이스 상속
- 디폴트 메소드와 인터페이스 확장
- 중첩 클래스
- 익명 객체
- 예외처리
< 인터페이스 상속 >
- 목적 : 클래스를 만들어서 객체를 생성하고자 함
➡ public interface 하위인터페이스 extends 상위인터페이스 1, 상위인터페이스 2 { ... } - 하위 인터페이스 구현 클래스는 아래 추상 메소드를 모두 재정의 해야 함
(하위 인터페이스의 / 상위 인터페이스 1의 / 상위 인터페이스 2의 추상메소드) - 인터페이스 자동 타입 변환
: 해당 타입의 인터페이스에 선언된 메소드만 호출 가능
✔ 클래스끼리 상속 (단일 상속) |
class 자식클래스 extends 부모클래스 { } |
✔ 인터페이스끼리 상속 (다중 상속 가능) 🥰 |
interface 자식인터페이스 extends 부모인터페이스1, 부모인터페이스2 { } |
✔ 클래스와 인터페이스 상속 (다중 상속 가능) 🥰 |
class 자식클래스 implements 부모인터페이스1, 부모인터페이스2 { } |
✔ (X) 말이 안된다.. 🥵 |
interface 인터페이스 implements 클래스 { } 왜? ➡ 실행문 없는 인터페이스가 클래스를 상속받는다? 말이 안됨; |
< 디폴트 메소드와 인터페이스 확장 >
- 인터페이스에서 디폴트 메소드를 허용한 이유
기존 인터페이스를 확장해서 새로운 기능을 추가하기 위함
- ex) MyInterface에 기능을 추가해야해서 추상 메소드를 추가했는데 A에서 문제발생
➡ A를 수정할 여건이 안된다면 MyInterface에 디폴트 메소드를 선언해야 함
< 중첩 클래스 >
- 중첩 클래스
클래스 내부에 선언한 클래스
➡ 두 클래스의 멤버들을 서로 쉽게 접근 가능, 코드의 복잡성 줄일 수 있음🥰
(어떤 클래스는 특정 클래스와 관계를 맺음 ➡ 클래스 내부에 선언하는 것이 좋다.)
선언 위치에 따른 분류 | 선언 위치 | 설명 | |
멤버 클래스 | 인스턴스 멤버 클래스 | class A { class B { ... } } |
A객체를 생성해야만 사용할 수 있는 B 중첩 클래스 (static 멤버 사용불가) 객체 생성 : ex) A a = new A(); A.B b = a.new B(); |
정적 멤버 클래스 | class A { static class C { ... } } |
A 클래스로 바로 접근 가능한 B 중첩 클래스 (모든 멤버 사용가능) 객체 생성 : A.C c = new A.C(); |
|
로컬 클래스 | class A { void method() { class B { ... } } } |
method()가 실행할 때만 사용할 수 있는 B 중첩 클래스 (메소드 내에서 선언가능) 로컬 클래스 객체 생성을 위한 메소드 호출 : a.method(); |
< 익명 객체 >
- 특징
- 이름이 X 객체, 단독 생성 불가능
- 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있음 - 사용 위치
필드의 초기값, 로컬 변수의 초기값, 매개변수의 매개값으로 주로 대입
UI 이벤트 처리 객체나, 스레드 객체를 간편하게 생성할 목적으로 주로 활용 - 익명 객체에 새롭게 정의된 필드와 메소드
익명 객체 내부에서만 사용
외부에서는 익명 객체의 필드와 메소드에 접근할 수 없음
이유: 익명 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용 가능
< 예외 처리 = 오류 처리 >
- 에러와 예외 구분, 예외의 종류
에러 (Error) | 예외 (Exception) = 오류 |
하드웨어의 잘못된 동작 또는 고장으로 인한 오류 에러가 발생되면 프로그램 종료 ➡ 정상 실행 상태로 돌아갈 수 없음 |
사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 오류 예외가 발생되면 프로그램 종료 예외 처리 추가하면 정상 실행 상태로 돌아갈 수 있음 |
(1) 일반(컴파일 체크) 예외(Exception) 예외 처리 코드 없으면 컴파일 오류 발생 |
|
(2) 실행 예외(RuntimeException) 예외 처리 코드를 생략하더라도 컴파일이 되는 예외 ➡ 경험 따라 예외 처리 코드 작성 필요 |
- JAVA에서 자주 발생하는 실행 예외
(1) Null Pointer Exception (NPE) | (2) Array Index Out Of Bounds Exception |
객체 참조가 없는 상태 Heap 영역에 데이터가 없어서 접근할 수 없는데 접근 시도를 했기에 역추적해서 발견해야 함! 우리가 작성한 파일명 클릭하기!! 클릭 시 10라인을 가르킨다. (오류데이타 ➡ 예외는 NumberFOrmatException 클래스) |
배열에서 인덱스 범위초과하여 사용할 경우 발생 *메서드는 문법적으로 예외처리 관련문법을 반드시 작성해야 하는 규칙을 가지고 있다. |
(3) Number Format Exception | (4) Class Cast Exception |
숫자로 변환될 수 없는 문자가 숫자로 변환할 경우 Integer.parseInt(String s) : 문자열을 정수로 변환 후 리턴 Double.parseDouble(String s) : 문자열을 실수로 변환 후 리턴 |
타입 변환이 되지 않을 경우 발생 instance of 연산의 결과가 true 이면 좌항 객체를 우항 타입으로 변환 가능 |
- 예외 처리 코드
: 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드
: 개발자의 경험을 바탕으로 작성해야 함
✨ try - catch - finally 블록
try {
// 예외 발생 가능 코드
} catch(예외 클래스 e) {
// 예외 처리
} finally {
// 항상 실행;
} - 예외 관련 문법
1) 예외전가 : 상위 개념에게 넘기는 의미
2) 예외처리구문 : 자신이 처리하는 의미
728x90