ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 221214 자바 7. 인터페이스, 내부클래스, 익명클래스,
    스타터스 백엔드 3기 2022. 12. 14. 18:31

    하루입니다.

    InterfaceTest, Worker, Student, VolTest, InnerClassTest(내부외부), AnonymousTest(무명익명)


     

    • 객체 형변환은 여러가지 객체를 공통 타입에 저장하고자 할 때, 배열이나 매개변수를 정의할 때 사용한다.
    • static final 타입 이름 = 값; 은 자주 사용된다. 수정불가한 값을 공유한다는 뜻이다.

     


     

    인터페이스

    • 아래 것들은 여러개오니까 바로 힙에 저장 못 하고 스택에 저장하고 참조하는 것.
    • 배열 : 동일 타입의 여러개 데이터를 모은다.
    • 클래스 : 데이터와 메소드를 여러개 모은다. 객체를 표현하기 위한 것이기 때문이다.
    • 인터페이스 ! static final 데이터와 abstract 메소드 여러개를 모은 것이다.

     

    interface 직원 {
          [abstract public] 일하다(){}
          점심먹다(){}
    }
    interface 학생 {
          공부하다(){}
          점심먹다(){}
    }
    class 조교 implements 직원, 학생 {
          일하다(){ 오버라이딩 }
          점심먹다(){ 오버라이딩 }
          공부하다(){ 오버라이딩 }
    }
    직원s = new 직원();            불가
    직1원s = new 조교();            자동형변환
    학생 s = new 조교();           자동형변환

    1. 자바는 클래스간 다중상속이 불가하다.
    2. 인터페이스의 메소드는 앞에 [abstract public] 이 자동으로 붙는다. 인터페이스는 추상 메소드만 포함한다.
    3. 클래스는 인터페이스를 다중상속 받을 수 있다.
    4. 자식클래스는 인터페이스의 메소드를 반드시 오버라이드 해야 한다.
    5. 인터페이스는 객체 생성이 불가능하다.
    6. 그래서 생성자가 필요 없다.
    7. 객체 생성 안 하고 변수 사용하기 위해 static final public 변수를 사용한다.

     

     

     

    abstract 클래스와 인터페이스 비교

    abstract  인터페이스

    1. 서로 다른 클래스에 공통으로 사용될 메소드를 선언한다 (공통)
    2. 서로 다른 클래스 중 일부 클래스의 부모클래스가 정해진 상태라면 interface를 사용해야 한다.

    abstract class A[
          abstract void m1();
          void m2();
    }
    Interface I {
          void m1();
          void m2();
    }
    - 추상 메소드와 구체적으로 정의된 메소드가 혼합되어 있다.
    - 부분적으로 추상적이다.
    - 단일상속만 가능하다.

    - 모든 메소드가 추상메소드이다.
    - 완벽하게 추상적이다.
    - 다중상속이 가능하다.
    - 서로 관계 없는 클래스들에게 관계를 맺어 줄 수 있다.
    - 개발시간을 단축시킬 수 있다.
    - 표준화가 가능하다.
    - 독립적인 프로그래밍이 가능하다. 간접적 관계를 가지게 되기에, 한 클래스의 변경이 다른 클래스에 영향을 미치지 않기 때문이다.

    I i1 = new B();
    I i2 = new C();
    array[0] = i1;
    array[1] = i2;

    - 이런 식으로 관계 맺고 큰 타입에 넣을 수 있다.
    - 인터페이스는 객체생성 불가하니까 자식 클래스 객체를 넣어야 한다.


    class B implements I

    class C extends D implements I

     

     

    jdk 1.8부터 추가된 특징 : static 메소드, default 메소드
    1.8 전 1.8 후
    abstract public 메소드
    static final public 변수
    abstract public 메소드 : 필수 오버라이딩
    static final public 변수

    public static 메소드 : 오버라이딩 불가능
    public default 메소드 : 선택적 오버라이딩


    - 인터페이스에 메소드 추가하는 건 잘 생각해야 한다. 이미 상속받은 a b c 클래스는 다 고쳐야 한다. 그래서 static 클래스나 default 메소드를 사용해야 한다.
    - 기본 정의하는 건데 그대로 사용해야하면 static, 오버라이딩 혹은 그대로 사용해야 하는 거면 default이다.
    - static은 클래스영역이니까 인터페이스클래스명.메소드명() 으로 쓰고, default는 static 아니니까 인터페이스로생성한객체.메소드명() 으로 쓴다.
    - 디폴트 메소드와 조상 메소드가 충돌한다면, 조상 클래스의 메소드가 상속된다.


     

     


     

     

    내부클래스(inner class) = 중첩클래스

    • 어디서 어떻게 사용되는지를 모르니까 이해가 잘 되지 않는다. 익명클래스가 많이 사용된다고 하셨는데, 주로 익명클래스의 용도로 사용되는 걸까?
    • 용도
    • 1. 중요한 정보를 다룰 때(?). 내부클래스를 사용하기 위해서는 반드시 외부클래스를 사용해야 한다. 이 방법을 통해 타 클래스의 내부 클래스 접근 방법을 제한할 수 있다.
    • 2. 이건 한 번 쓰고 말 거다 (???)
    • 3. 클래스를 변수처럼 쓰기 위해서 (???)
    • 4. 익명클래스로 쓰려고 (???)

     

     

     

     

     

    class A { }  
    class B {                                 outer class
          class A { }                         A는 제 겁니다. inner class
          A a1 = new A( );            
    }
    class B {
          A a1 = new A( );           오류. B 허락 받아야 한다.
    }
    소속을 확실히 한다는 장점이 있다. 사용방법을 제한시킨다. 포함관계를 확실히 한다.
    A클래스는 B클래스의 멤버변수처럼 취급이 된다.
     
    멤버변수 - 객체변수 멤버변수 - static 변수 지역변수
    멤버inner 클래스 멤버 static inner 클래스 지역 inner 클래스

     

     

     


     

     

    익명클래스 (무명클래스)

     

     


     

    8장. 예외처리

    • 오류란 프로그램을 작성하고 실행하는 과정에서 생기는 오동작이다.
    • 견고한 프로그램은 항상 일정한 동작을 보장해야 한다. 

     

    컴파일오류

    • 문법 / 구문 / systax 오류
    • 빨간 줄 뜬다.
    • 자바 소스를 수정할 때까지 계속 발생한다.

     

     

    실행오류

    • 실행 조건에 따라 발생한다.             ==>              프로그래밍적 해결 없다.
    • 컴퓨터 전원이 나간다, 메모리가 부족하다             ==>              프로그래밍적 해결 없다.

     

     

    프로그래머가 해결할 수 있는 실행오류 : 예외 = execption

    • int i = 100/0; 이라거나
    • String arr[] = new String[i]                i = -1; 전달되는 경우

     

    자바의 모든 예외는 execption의 자식이다.

     

     

    try catch의 수행과정

     

    try catch finally의 수행과정

    나중에 파일, 디렉토리, db, 네트워클르 사용해 개발할 것이다. .

    이를 컴퓨터 자원이라고 한다.

    만약 윈도우에서 자원 사용하는 프로그램이 하나도 없는 상태에서, 자바프로그램 파일 오픈을 허락하는데, 자바프로그램의 읽기/쓰기를 수행한 후, 윈도우 파일을 close(); 해야 한다.

     


    FileReader fr= bnew FileReader("a.txt");

        fr.read();                        => 만약 여기서 에러가 발생할 경우, 실행이 중단되어 close();가 되지 않는다.
                                                   다른 파일들이 이 기능을 사용하지 못한다. 메모리 누수가 발생한다.
        ...
        fr.close();                     => 이 기능은 반드시 실행되어야 하고, 그래서 finally 블록 안에 들어가야 한다.
    Multiple markers at this line
    - Resource leak: 'fr' is never closed
    - Unhandled exception type FileNotFoundException

     

     

     


     

    내부클래스 ... 

     

     

Designed by Tistory.