13장 - 인터페이스와 추상클래스, enum
- 인터페이스에 선언되어 있는 메소드는 body가 있는가?
- 없음
- 인터페이스를 구현하는 클래스의 선언시 사용하는 예약어는 무엇인가?
- implements
- 일부만 완성되어 있는 클래스는 무엇인가?
- abstact 클래스
- 3번의 답에 있는 클래스에 body가 없는 메소드를 추가하려면 어떤 예약어를 추가해야 하는가?
- abstract
- 클래스를 final로 선언하면 어떤 제약이 발생하는가?
- 상속 불가
- 메소드를 final로 선언하면 어떤 제약이 발생하는가?
- overriding 불가
- 변수를 final로 선언하면 어떤 제약이 발생하는가?
- 반드시 생성과 동시에 초기화를 해줘야 함
- enum 클래스 안에 정의하는 여러 개의 상수들을 나열하기 위해 상수 사이에 사용하는 기호는 무엇인가?
- ,
- enum으로 선언한 클래스는 어떤 클래스의 상속으로 자동으로 받게 되는가?
- java.object
- enum 클래스에 선언되어 있지 않지만 컴파일시 자동으로 추가되는 상수의 목록을 배열로 리턴하는 메소드는?
- values()
인터페이스와 abstract 클래스를 사용하는 이유
- 설계시 선언해 두면 개발시에 기능 구현에만 집중
- 메소드의 이름과 매개 변수 선언의 격차를 줄임
- 선언과 구현을 구분
인터페이스
- 내부 선언된 메소드는 body가 있으면 안된다
- implements라는 예약어를 통해 인터페이스를 클래스에서 구현한다
- 인터페이스를 구현한 클래스에서는 반드시 body를 만들어주어야 한다
- 외부에 노출되는 것을 정의해 놓고자 할 때 사용
- MemberManager member = new MemberManagerImpl();
- 실제 member의 타입은 MemberManager가 되기 때문에, member에 선언된 메소드를 실행하면 MemberManagerImpl에 있는 메소드들이 실행
abstract 클래스
- 자바에서 마음대로 초기화하고 실행할 수 없도록 되어있다
- abstract 클래스를 구현해 놓은 클래스로 초기화 및 실행이 가능
- abstract 예약어 사용
- abstract 클래스는 abstract로 선언한 메소드가 하나라도 있을 때 선언
- 구현된 메소드가 있어도 됨
- static이나 final 메소드가 있어도 됨
- 클래스이기 때문에 extends를 사용하여 구현
- abstract 클래스의 상속을 받으면 구현되지 않은 메소드들을 구현해야 함
인터페이스 | abstract 클래스 | 클래스 | |
선언 시 사용하는 예약어 | interface | abstract | class |
구현 안 된 메소드 포함 가능 여부 | o (필수) | o | x |
구현 된 메소드 포함 가능 여부 | x | o | o(필수) |
static 메소드 선언 가능 여부 | x | o | o |
final 메소드 선언 가능 여부 | x | o | o |
상속(extends) 가능 | x | o | o |
구현(implements)가능 | o | x | x |
* 다중 상속 불가 (extends) 그러나 다중 구현 (implements) 가능
final
- 클래스가 final로 선언하면 상속 불가
- 메소드를 final로 선언하면 overriding 불가
- 인스턴스 변수나 클래스 변수를 final로 선언하면 그 변수는 더 이상 바꿀 수 없으므로, 생성과 동시에 초기화를 해줘야 함
- 매가 변수나 지역 변수를 final로 선언한 경우에는 반드시 선언시에 초기화 x, 매개 변수는 이미 초기화 되서 넘어 왔고, 지역 변수는 메소드를 선언하는 중괄호 내에서만 참조되므로.
- 참조자료형을 final로 선언할 경우, 값을 할당 할 수 없다. 두번 이상 값을 할당하거나 새로 생성자를 사용하여 초기화 할 수 없다.
- 그러나 해당 클래스가 final이라고 해서, 그 안에 있는 인스턴스 변수나 클래스 변수가 final은 아니므로, 값을 할당 하거나 초기화 가능하다
enum
- 연관된 상수의 집합
- 열거형 클래스
- 타입을 지정하거나 값을 지정할 필요 없음
- enum 타입 - enum 클래스이름.상수 이름 ex) OverTimeValues.THREE_HOUR
- enum 클래스는 생성자를 만들 수 있지만, 생성자를 통하여 객체를 생성할 수 없다.
- enum 클래스의 생성자는 package-private과 private만 접근 제어자로 사용
- 컴파일시 생성자 자동 생성
- java.lang.Enum
메소드 | 내용 |
compare(E e) | 매개 변수로 enum 타입과의 순서(ordinal) 차이를 리턴한다 |
getDeclaringClass() | 클래스 타입의 enum을 리턴한다 |
name() | 상수의 이름을 리턴한다 |
ordinal() | 상수의 순서를 리턴한다 |
valueOf(Class<T> enumType, String name) | static 메소드다. 첫번째 매개 변수로는 클래스 타입의 enum을, 두번째 매개변수로는 상수의 이름을 넘겨주면 된다 |
values() | enum클래스에 선언되어 있는 모든 상수를 배열로 리턴한다. |
14장 - 다 배운 것 같지만, 예외라는 중요한 것이 있어요
- 예외를 처리하기 위한 세가지 블록
- try catch finally
- 1의 답중에서 여기에서 예외가 발생할 것이니 조심하세요 라고 선언하는 블록은 무엇인가
- try
- 1의 답중에서 예외가 발생하든 안하든 반드시 실행해야하는 블록은 무엇인가
- finally
- 예외의 종류 세가지
- checked exception, error, unchecded exception
- 프로세스에 치명적인 영향을 주는 문제가 발생하는 것
- 에러
- try나 catch 블록 내에서 예외를 발생시키는 키워드
- throws
- 메소드 선언시 어떤 예외를 던질 수 도 있다고 선언시 사용하는 키워드
- throws
- 직접 예외를 만들때 어떤 클래스의 상속을 받는가
- Throwable 클래스
try catch
- try {예외가 발생하는 문장} catch(Exception e){예외 발생시 처리}
- try 블록내에서 예외가 발생하면 예외가 발생한 줄 이후에 있는 try 블록 코드는 수행하지 않는다
- try-catch내에서 예외가 발생하지 않는 경우, try내의 모든 문장이 실행되고, try-catch이후의 문장 수행
- try-catch내에서 예외가 발생하는 경우, try 내에서 예외가 발생한 이후의 문장은 수행하지 않는다. catch내의 문장은 반드시 실행하고, try-catch 문장 이후의 내용이 실행
- 변수는 try 블록 앞에 미리 선언해야함
finally
- 어떠한 경우에도 반드시 실행
- 코드의 중복을 피하기 위해 필요
두개 이상의 catch
- catch 블록은 순서를 따진다
- 모든 예외의 부모 클래스는 java.lang.Exception클래스
- 먼저 선언한 catch 블록의 예외 클래스가 다음에 선언한 catch블록의 부모에 속하면, 자식에 속하는 catch블록은 절대 실행될 일이 없으므로 컴파일 되지 않는다
- 하나의 try블록에서 예외가 발생하면 그 예외와 관련있는 catch블록을 찾아서 실행
예외의 종류
- checked exception
- errror
- runtime exception 혹은 unchecked exception
error
- 자바 프로그램 밖에서 발생한 예외 (서버 디스크 고장, 메인보드 고장 등으로 자바가 제대로 동작하지 못한 경우)
- 프로세스에 영향 반면 exception은 쓰레드에만 영향
runtime exception
- 예외가 발생한 것을 미리 감지하지 못했을 때 발생
- 컴파일시 체크를 하지 않기 때문에 unchecked exception라고도 한다 (NullPointException, ClassCast..)
Throwable
- Exception과 Error의 공통 부모 클래스는 Object 클래스이며, 또 Throwable클래스다
- Exception과 Error를 처리 시 Throwable로 처리해도 무방
- getMessage() - 예외 메세지를 string 형태로 제공
- toString() - getMessage()보다 자세하게 예외메세지 제공
- printStackTrace() - 가장 첫 줄에는 예외메세지를 출력, 두번째 줄부터는 예외가 발생하게된 메소드들의 호출 관계 출력
예외 발생
- 예외가 발생된 메소드를 호출한 메소드로 던진다는 의미
- 메소드를 선언할 때 매개 변수 소괄호 뒤에 throws라는 예약어를 적어 준 뒤 예외를 선언하면 해당 메소드에서 선언한 예외가 발생했을 때 호출한 메소드로 예외가 전달된다. 만약 메소드에서 두가지 이상의 예외를 던질 수 있다면, 콤마로 구분하여 예외 클래스 이름을 적어주면 된다
- try 블록 내에서 예외를 발생시키는 경우에는 throws라는 예약어를 적어 준 뒤 예외 객체를 생성하거나 생성되어있는 객체를 명시해준다. throw한 예외 클래스가 catch 블록에 선언되어 있지 않거나, throws 선언에 포함되어 있지 안핟면 컴파일 에러가 발생
- catch 블록에서 예외를 throw 할 경우에도 메소드 선언의 throws 구문에 해당 예외가 정의되어 있어야 한
- 해당 메소드에서 예외를 처리하지 못하는 상황이거나, 미처 처리하지 못한 예외가 있을 경우에 대비하기 위함
'JAVA > about java' 카테고리의 다른 글
[String] String 클래스 (0) | 2023.04.23 |
---|---|
[String] String 빈 값 및 Null 체크 (0) | 2023.04.19 |
[JVM] JVM 메모리모델 (0) | 2023.04.18 |
[Muatable and Immutable] 가변 객체와 불변 객체 (0) | 2023.04.17 |
[Access Modifier, extends, Object] 접근제어자 / 상속 / Object 클래스 (0) | 2023.04.16 |