2016년 2월 1일 월요일

[JAVA 교육] Interface 인터페이스 / 내부클래스 / 예외

[JAVA 교육] Interface 인터페이스 / 내부클래스 / 예외
(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.



  1. Review - 다형성
    1. 상속관계
    2. 다형적 객체
      1. 다형적 객체는 선언하는 타입과 생성하는 타입이 다르다.
      2. 선언은 부모클래스 - class, abstract class, interface(모든 method가 다all 추상 method)
      3. 생성은 자식클래스 - class
    3. 이종모음
      1. 서로 다른 타입들의 집합(배열)이 가능
      2. 배열 타입을 부모클래스로 선언하고 자식클래스 타입의 객체들을 저장
      3. 기본타입도 저장할 수 있게 하기 위해서 wrapper class를 지원(jdk 1.4 이하)
        1. 기본타입을 객체타입으로 변환
        2. jdk 1.5 이상은 Auto-Boxing 지원
    4. VMI ( Virtual Method Invocation )
      1. 컴파일시에는 선언한 클래스의 메서드 유무를 확인(메서드 시그니처의 유무만 확인)
      2. 런타임시에 객체를 생성해서 참조하는 클래스의 메서드를 실행(호출)
      3. 예. Object obj = new Circle();
              obj.draw();  //컴파일시에 에러. Object에는 draw() 메서드가 없기때문에.
              이런 경우에는 draw() 메서드가 존재하는 객체 타입으로 형변환 해줘야한다.
              (Circle클래스나 draw() 메서드를 가진 부모클래스로 형변환)
  2. Interface 인터페이스
    1. UML 표기법
    2. 기능의 명세 : 인터페이스의 메서드는 추상메서드
    3. 비교
      1. 클래스 : 상속 O, 객체 생성 O
      2. 추상클래스 : 상속 O, 객체 생성 X
        • 구현된 메서드, 구현 안 된 메서드를 모두 가질 수 있다.
      3. 인터페이스 : 구현, 객체 생성 X
        • 인터페이스를 구현한 자식클래스에서 인터페이스의 모든 메서드를 구현해주어야 한다.
        • 오직 구현되지 않은 메서드만 가질 수 있다.
        • 용도: 내가 어떤 기능이 있다고 외부로 알려주는 역할.
    4. 누가 사용하는가? Interface의 이해관계자.
      • to 개발자, Interface의 어떤 기능을 사용하는 사람. 메서드 원형을 보고 사용만 한다.
        "구현은 어딘가에 되어있으니깐 신경쓰지말고 코딩하세요."
        Association
      • to 벤더, Interface를 만드는 사람. Interface의 메서드를 구현하는 사람. (메소드 속을 채운다.)
        Realization
      • 위의 둘 사이에 표준을 정해주는 사람이 필요하다. Interface를 정의하는 사람.
    5. 선언 - interface
    6. 구현 - implements, 구현해주는 사람이 벤더(Interface를 만드는 사람)
    7. 멤버
      1. 변수 - 상수 - public static final
      2. 메서드
        • 추상 메서드 - public abstract (public은 안써도 자동으로 붙음)
        • default - 구현된 메서드(concrete method) - Java SE 8부터 가능
        • static 메서드 - 정적 메서드 - Java SE 8부터 가능

      3. Interface가 Interface를 상속할때는 extends 키워드 이용. 다중 상속 가능.
        • 여러 Interface를 extends에 넣을 수 있다.
  3. 내부클래스
    1. Inner Class
      1. (Instance) Inner Class
      2. Static Inner Class
        1. static이 붙은 Inner Class
        2. Top level class로 사용된다. = 정적 메서드나 정적 멤버를 갖는 클래스
    2. Local Class
      1. method안에서 정의되어 있는 class - Local 클래스
      2. 인자(argument)값으로 정의 - Anonymous class
    3. Local Interface
      1. Anonymous Class와 함께 사용 될 수 있다.
    4. 접근제한자 public, protected, package friendly, private 모두 사용 가능.
  4. 예외
    1. 정의
      1. mild한 에러(가벼운 에러)
      2. 예시
        1. 파일오픈을 하려하는데 파일이 없는 경우
        2. 네트워크 연결이 잠시 중단된 경우
        3. 배열의 범위를 넘어선 data 참조
    2. 상속관계
      1. Throwable
        1. Error
        2. Exception
    3. 처리
      1. try~catch
        • 예외의 원인이 본일일 경우 처리하는 것.
        • try블럭에서는 예외가 발생할 가능성이 있는 문장들을 넣는다. 실행 완료를 보장하지 않는다.
        • catch블럭은 예외가 발생하면 실행된다.
        • fianlly블럭은 예외가 발생해도, 안해도 항상 실행하는 블럭이다.
          리소스를 반납해야 하는 경우 finally블럭에 넣어준다.
      2. throws
        • 예외의 원인이 caller에 있을 경우, callee에서 하는 것.
    4. jdk 1.7에 추가된 예외 기능
      1. multi catch
        1. catch(AException | BException e)
        2. 이때 AException과 BException은 상속관계가 있으면 안된다.
      2. try-with-resources(문법은 아니다.)
        1. try () { ... }
          1. try(FileReader in = new FileReader("a.txt"))
        2. finally없이 리소스를 반납해준다.
        3. 성능적으로 기존보다 좋아진 것은 아니다. 단지 스타일이 추가된 것이다.
    5. 종류
      1. Runtime Exception
        1. Unchecked Exception : 예외 발생 유무를 컴파일 할때가 아니라 런타임에 확인한다.
        2. 예외처리 하지 않아도 컴파일은 된다.
      2. 그 외 나머지
        1. Checked Exception
        2. 컴파일시에 예외 발생 체크
    6. throw
      1. 예외를 발생 시킬때 사용한다.
  5. Tip
    1. Interface는 현재 내가 가지고 있는 기능을 외부로 알려주기 위한 용도.
    2. Interface의 default와 static메서드에 대해서 Java SE 8에 새로 나왔기 때문에 적절한 경우에 사용하면 좋겠다.
    3. 익명클래스(Anonymous Class) : 클래스 구현과 객체 생성을 한번에 한다. (주로 이벤트 처리할때 사용 on Android 개발)
      1. 객체 생성 옆에 바로 구현하니깐 클래스 이름이 필요없다. 그래서 익명 클래스.
      2. 마지막 중괄호 뒤에는 세미콜론을 붙여야한다.

댓글 없음:

댓글 쓰기