인터페이스 복습 및 이너, 중첩 클래스, 예외처리
인터페이스(Interface)
일반클래스, 추상클래스 ,인터페이스도 독립적인 .java 파일로 만들 수 있다.
1.public interface 인터페이스명{}
2. 구성요소 == 생성자는 못가짐
1) 상수, 추상메서드, default 메서드, static 메서드
상수: public static final 자동 생성( 자동 상수화 )
ex) int num = 3; 이라고 인터페이스에 작성하면, 자동으로 public static fianal int num = 3; 로 인식된다.
2) 추상메서드 = public abstract 자동 생성
3) default 메서드 = public default void b(){}
4) static 메서드 = public static void c(){}
3. 추상클래스와 비슷하게 new 생성이 안돼서 힙에 직접 못올라간다.
==> 하위클래스(자식 클래스 아님) 에서 구현하여 인터페이스 요소를 사용한다.
4. 일반클래스 및 추상 클래스의 경우 단일 상속이지만, 인터페이스는 여러 클래스들이 다중 구현할 수 있다.
5. 일반클래스에서 상속 + 인터페이스 까지 같이 쓰는 문법
public class extends 부모클래스명 implements 인터페이스명{}
public interface Flyer {
//구성요소
// 1. 상수
int num = 2; // public static fianl int num = 2; 와 같음.
public static final int COUNT = 2; // 권장
// 2. 추상메서드
public void a(); // public abstract void a(); 와 동일.
void b(String s); // 인터페이스에서 함수 작성시, 명시하지 않음녀 public abstract void b(); 이다. 일반클래스 및 추상클래스처럼 접근지정자가 default가 붙는게 아니다!!!!!!!
public abstract void c(); // 생략 가능하지만, 코드 가독성을 위해 적어주자.
//3. default 메서드
public default void d() {
System.out.println("default 메서드.d");
}
public default void e(int n) {
System.out.println("default 메서드.e");
}
// 4. static 메서드
public static int f() {
return 100;
}
}
6. 인터페이스 끼리도 인터페이스가 가능하지만 상속 키워드를 사용해서 가능하다(entends)
**************개발의 의존성***************
인터페이스를 잘 사용하자.
has a 관계에서 하나의 클래스를 수정하면, 연동된 여러 클래스들을 일일히 수정해야 하지만, 인터페이스를 구현하면 같은 메소드를 통해 연동되기 때문에 쉽게 수정이 가능하다
ex) db 연동
*중첩클래스(nested class)
outer 클래스, inner 클래스
inner 클래스가 멤버 클래스로 적용됐다면, outer 클래스의 private 변수 ,메서드에 접근 가능하다.
inner 클래스는 static 사용이 불가하다. 단, inner 클래스 자체를 static 선언하면 내부에서도 static 사용 가능하다.
class Inner1{
static class Inner2{
단, static inner 클래스는 outer에 있는 멤버에 접근을 못한다. 위 두 사항은 하나를 얻고자하면 하나를 포기해야된다는 뜻
일반 outer 클래스는 static을 가질수 없다.(멤버변수 메서드 말고..)
ex) public static OuterClass ==> X
로컬 inner 클래스(거의 사용안함)
outer 클래스 안 메소드 안에서 로컬변수마냥 선언된 클래스.
익명 클래스 (anonymous class)
이름없는 클래스, 인터페이스 사용시 주로 사용됨.
.java 가 안만들어진다.
바로 메인함수에서 작업한다.
다형성을 이용한다.
문법:
인터페이스명 변수명 = new 인터페이스명 ==> 주의! 뒤에 세미클론 찍으면 안된다. why? 인터페이스는 new가 안되기 때문에.
따라서..
문법
인터페이스명 변수명 = new 인터페이스명{}; ==> 중괄호 뒤에 세미클론 붙는다.
**예외처리**
{
1.예외(exception)
->일반적으로 에러라고 부름
->문제 발생
->문제 발생 시점: 컴파일 => 이클립스가 잡아줌.
실행시 => ******
2.실행시 예외발생되면 '비정상 종료' 됨.\
3. 예외처리(exception hendling)
=> 비정상 종료를 정상종료로, 문제발생 코드를 수정하는 등 해결은 안된다. 문제 발생 이후의 코드부터 실행하도록 처리.
4.예외 클래스를 제공하는데 다음 구조이다.
Object 클래스 <ㅡ Throwable <ㅡ Exception <ㅡ 비런타임 계열인 IOException 및 SQLException <ㅡ ...(수많은 클래스들)
Exception <ㅡ 런타임 계열인 RuntimeException <ㅡ ... (수많은 클래스들)
5.예외처리 방법
가. try~catch문
문법: try{실행문;//에러코드(예외) 발생}catch(xxException e){예외처리 문장;}
나. throws 문