Chap 17 인터페이스와 추상클래스
- 인터페이스
- interface [인터페이스 이름] { [추상메소드 선언]}
- 추상 메소드 : 메소드의 몸체가 비어 있는 메소드
- 인터페이스를 대상으로는 인스턴스의 생성이 불가능 하고 상속만 가능.
- 인터페이스를 상속하는 행위는 '구현' 이라 한다 // [클래스 이름] implements [인터페이스 이름]
- 인터페이스 문법 구성
- 인터페이스 메소드
- 모든 인터페이스 메소드는 public 으로 선언된 것으로 간주한다.
- 인터페이스 변수
- 반드시 선언과 동시에 값으로 초기화 해야한다.
- 모든 변수는 public, static, final이 선언된 것으로 간주한다.
- 인터페이스를 구현하는 클래스는 모든 추상 메소드를 구현해야한다.
- 인터페이스의 활용
- 인터페이스 상속
- 만약 인터페이스에 추가할 것이 있어 추가한다면 해당 인터페이스를 구현한 모든 클래스를 수정해야한다.
- 기존에 새로운 기능을 추가하려면 인터페이스 상속을 이용하여 새로운 인터페이스를 생성한다.
- 이를 통해 기존에 제작 및 배포가 되어 사용 중인 드라이버를 수정할 필요가 없게 된다.
- 디폴트 인터페이스
- default 를 추가하여 기존의 인터페이스에 영향이 없게 한다.
- 상속을 한다면 인터페이스의 수가 늘어나지만 이것은 기존의 인터페이스에 추가하는 것
- 마커 인터페이스
- 대게 아무것도 없는 인터페이스로 instance of 와 같이 사용하여 구현을 통해 클래스의 표식이 된다.
- 번외) 추상 클래스
- 하나 이상의 추상 메소드 (abstract)를 갖는 클래스
- 추상 클래스는 인터페이스와 유사하나 클래스이다.
- 추상 클래스를 대상으로 인스턴스 생성도 불가능 하며 다른 클래스에 의해서 추상 메소드가 구현(상속)되어야하며 extends 를 활용하여 상속받아야한다.
Chap 18 예외처리
- try ~ catch 문
- try 영역의 실행 중간에 예외 상황이 만들어지고 이로 인해 가상 머신이 Exception 인스턴스를 생성하면, 이 인스턴스는 메소드를 호출하듯 catch 구문의 매개변수에 전달된다.
- 이렇게 try 구문으로 묶인 작업들은 서로 관련이 있는 작업들이다.
- 여러 catch 문이 올수도 있으며 '|' 연산을 통해 catch 문을 활용할 수도 있다.
- try 구문 안에 있는 코드는 밖에 있는 코드에 비해 실행속도가 느리므로 과도한 예외처리는 심각한 성능저하로 이어질 수 있으니 유의하여 사용하여야한다.
- 모든 예외 클래스는 Throwable을 상속하므로 catch(Throwable e)를 활용할 수도 있다.
- 하지만 Throwable 로 try catch 문을 사용하지 않는 것이 좋다. 실제로 코드가 잘못된 부분일 수도 있기 때문이다.
- 예외 클래스의 구분
- Throwable class
- Error class
- Exception Class
- RuntimeException class (Arithmetic, ClassCast, IndexOutOfBounds,...)
- Error class 의 경우 처리할 수 있는 예외가 아니므로 예외처리를 하지 않고 프로그램을 종료시켜 원인을 파악한다.
- RuntimeException class 의 경우 대부분 프로그래머가 대부분 예외처리를 하지 않는다. 코드가 잘못된 부분이기 때문이다.
- Exception을 상속하는 예외 클래스의 처리
- [메소드 이름 ] throws [예외 클래스 이름] : 예외가 메소드 내에서 발생한 경우 메소드를 호출한 영역으로 예외의 처리를 전달한다는 뜻이다.
- Exception을 상속하는 예외의 발생에 대해서는 t~c 문 혹은 throws 선언을 통해서 예외를 처리해야한다.
- 프로그래머가 정의하는 예외
-extends Exception을 활용하여 프로그래머가 예외를 설정할 수도 있다.
- finally
-try catch에 이어 finally 가 추가되면 try 영역에 진입시 catch 문의 실행여부와 상관 없이 작동한다.
- try-with-resource
- try( [resource] ){} 의 형식으로 사용되며 종료의 과정을 필요로 하는 리소스를 생성할수 있다.
'JAVA' 카테고리의 다른 글
[JAVA] 자바 기초 IV (0) | 2022.07.23 |
---|---|
[JAVA] 자바 기초 II (0) | 2022.07.20 |
[JAVA] 자바 기초 I (0) | 2022.07.16 |