인터페이스를 이용한 다형성
인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능
인터페이스를 메서드의 리턴 타입으로 지정할 수 있다.
인터페이스의 장점
- 두 대상(객체)간의 연결, 대화, 소통을 돕는 중간 역할을 한다.
- 선언(설계)과 구현을 분리시킬 수 있게 한다.
- 인터페이스 덕분에 B가 변경되어도 A는 안 바꿀 수 있게 된다.
- 개발 시간을 단축할 수 있다.
- 변경에 유리한 유연한 설계가 가능하다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들을 관계를 맺어줄 수 있다.
디폴트 메서드와 static메서드
인터페이스에 디폴트 메서드, static 메서드 추가 가능(jdk 1.8부터)
인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움 -> 디폴트 메서드 생성
디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반)
interface MyInterface {
void method();
void newMethod(); // 추상 메서드
}
해결책
interface MyInterface {
void method();
default void newMethod() {}
}
디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책
1. 여러 인터페이스의 디폴트 메서드 간의 충돌
인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.
2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
조상클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.
내부 클래스
클래스 안에 클래스
내부 클래스의 장점
내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
코드의 복잡성을 줄일 수 있다.(캡슐화)
내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일
프로그램 오류
컴파일 에러 : 컴파일 할 때 발생하는 오류
런타임 에러 : 실행 할 때 발생하는 오류
논리적 에러 : 작성 의도와 다르게 동작
Java 런타임 에러
에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외처리의 정의와 목적
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
Exception 클래스 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
RuntimeException 클래스 : 프로그래머의 실수로 발생하는 예외
try-catch 문에서의 흐름
1. try블럭 내에서 예외가 발생한 경우
- 발생한 예외와 일치하는 catch 블록이 있는지 확인한다.
- 일치하는 catch 블럭을 찾게 되면 그 catch 블록 내의 문장들을 수행하고 전체 try - catch 문을 빠져나가서 그다음 문장을 계속해서 수행한다. 만일 일치하는 catch 블록을 찾지 못하면 예외는 처리되지 못한다.
2. try 블럭 내에서 예외가 발생하지 않은 경우
- catch 블럭을 거치지 않고 전체 try-catch 문을 빠져나가서 수행을 계속한다.
printStackTrace() : 예외 발생 당시의 호출 스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
checked 예외 : 컴파일러가 예외 처리 여부를 체크(예외 처리 필수 : Exception)
unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 안 함(예외 처리 선택 : RuntimeException)
예외를 처리하는 방법
try-catch문, 예외 선언하기
예외 선언
메서드가 호출시 발생 가능한 예외를 호출하는 쪽에 알리는 것
finally 블럭
예외 발생 여부와 관계없이 수행되어야 하는 코드를 넣는다.
try-catch 문 제일 마지막에 위치해야 한다.
사용자 정의 예외 만들기
우리가 직접 예외 클래스를 정의할 수 있다.
조상은 Exception과 RuntimeException 중에서 선택
'개발 > Java' 카테고리의 다른 글
자바의 정석 - 기초편 [컬렉션프레임웍과 핵심 인터페이스 ~ HashSet(1)] (0) | 2022.07.13 |
---|---|
자바의 정석 - 기초편 [연결된예외 ~ 래퍼클래스] (0) | 2022.07.11 |
자바의 정석 - 기초편 [제어자 ~ 인터페이스의 선언, 상속, 구현] (0) | 2022.07.06 |
자바의 정석 - 기초편 [참조형 매개변수 ~ static import문] (0) | 2022.07.04 |
자바의 정석 - 기초편 [기본형, 객체지향 ~ 기본형 매개변수] (0) | 2022.06.30 |