본문 바로가기

IT/Java

2013.01.14. Java Interface, 익명내부클래스, Object클래스, Exception클래스



2013.01.14. Java Interface, 익명내부클래스, Object클래스, Exception클래스


인터페이스 사용의 이유

 - Java에서는 객체간의 혼선을 최대한 방지하기 위해 둘 이상의 객체로부터의 상속(다중 상속)을 허용하지 않는다.

 - 클래스의 상속이 아닌 공통기능이 추출된 인터페이스의 구현을 통해 재사용성을 극대화한 시스템 구축이 가능해진다.


인터페이스 선언 및 구현 예

 interface Lendable {

     void checkOut(String borrower, String date);

     void checkIn;

 } 


 class SeparatedVolumn implements Lendable {

     void checkOut(String borrower, String date) {

                             … … 

     }

 }


인터페이스의 특징

 - 서로 다른 클래스들의 공통적인 기능을 추출하여 구현하는 기능.

 - 인터페이스 내의 모든 메서드는 추상메서드다. (자식 클래스의 오버라이딩이 강제됨)

 - 해당 인터페이스를 구현하여 다른 메서드를 실체화하는데만 활용, new 연산자를 통한 객체 생성 불가.

 - 인터페이스 간에도 상속 가능, 클래스의 상속과 달리 인터페이스는 다중 구현이 가능하다.

+ 다른 인터페이스를 구현한 인터페이스를 이식할 때 두 인터페이스의 모든 메서드를 오버라이딩 해야한다.


내부 클래스(Inner Class)

 - 클래스 내에서 다시 한번 클래스가 정의되는 경우. (극히 드물다)

 - 접근제어자가 private라도 접근 가능.

 - Inner Class는 멤버 변수로 취급되며, 따라서 손쉽게 접근이 가능하다.

+ 적절히 활용하면 코드의 가독성을 향상시킬 수 있다.


익명 내부 클래스(Abstract Inner Class)

 - 클래스 정의문이 없으며, new 연산자를 사용하여 클래스를 생성하는 양식으로 대체한다.

 - 일회용 클래스로서 생성하여 클래스 내 정의된 추상메서드를 꺼내어 쓰고자 할 때 사용한다. 곧,

① new 연산자를 통해 생성한 클래스가 추상클래스일 때,

인터페이스를 implements 하고자 하는 경우 가 익명 내부 클래스가 된다. (필기해놓긴 했는데 무슨말인지 모르겠다 -_-)


Object클래스

 - 모든 클래스의 공통특성을 추출하여 만들어진 부모 클래스.

 - 모든 클래스에 적용 가능한 다양한 메서드가 정의되어 있다.

 - Object 클래스의 메서드를 오버라이딩하여 원하는 결과값의 형태를 얻어낼 수 있다.

 - Object 클래스의 equals()메서드 오버라이딩의 예)

   


Object 클래스의 중요한 메서드들

 - toString : 객체가 가지는 값(주소값)을 문자열로 만들어서 리턴.

 - equals : 객체가 가지고 있는 주소값을 비교하는 메서드.

 - clone (Cloneable 인터페이스 구현 필요) : 객체를 복사하는 메서드.

 - finalize : 객체가 제거되기 전에 자동으로 호출되는 메서드.

 ex) String str = object.toString(); 

 ex) if(object1.equals(object2)) { … }

 ex) Task object1 = new Task();

      Task object2 = (Task)object1.clone()


Exception 클래스

 - 기본 Java API에는 Java에서 발생가능한 모든 문법적인 Exception이 클래스로서 존재한다. (DataNotFoundException, SQLException, )

 - 정상적인 프로그램의 기능 수행이 방해받는 경우. ① try-catch문에 의해 처리(handle)되거나 ② throws 연산자를 통해 메서드 밖으로 던져짐.

 - getMessage 메서드 : 예외에 대한 정보를 출력.

 - printStackTrace 메서드 : 예외에 대한 정보와 더불어 발생과정, 자취 등을 더해서 출력.


try-catch 구문

 - try블록 : 로직 실행시 예외 발생시 처리를 적용할 블록. 해당 구간에서 예외 발생시 catch블록으로 넘어간다.

 - catch블록 : 예외 발생시 이에 대한 처리로직이 위치하는 블록. getMessage 메서드와 printStackTrace 메서드로 예외 정보를 확인 가능하다.

getMessage : 예외에 대한 정보를 출력. / printStackTrace : 예외에 대한 정보와 더불어 발생과정, 자취 등을 추가로 출력.

 - finally블록 : 예외가 발생하든, 발생하지 않든 해당 블록 내의 로직은 무조건 실행된다. IO Stream / Connection 등에 반드시 적용.


throw 명령문

 - 예외를 인위적으로 발생시키는 명령문.

 - Main함수에서도 사용 가능하지만, 에러발생에 대한 정보를 얻을 수 없기 때문에 보통 Main함수 내에서는 throws문을 사용하지 않는다.


Checked Exception / Unchecked Exception

 - Checked Exception : 실행에 앞서 컴파일링에서 발생하는 예외.

 - Unchecked Exception : 컴파일링 과정에서는 발생하지 않고, 실행 중 발생하는 예외.


Exception에 대한 정리

 1) Exception은 Java가 기본 Java API에서 발생할 수 있는 문법적인 오류를 직접 제기하는 상황이다.

 2) Exception은 try-catch문을 통해 적극적으로 해결하거나, throws 명령문을 통해 회피가 가능하다.

 3) Exception이 발생하는 과정과 그 종류 및 원인을 파악해 디버깅이 가능해야 하며, 이는 시스템 안정화와 직결된다.