2013년 8월 8일 목요일

2013-08-08 [JAVA] 예외처리, Streaming Programing, File(다형성 등)

1.예외처리

(1) 예외처리 개요
 - 예외처리에는 3가지 경우가 있습니다
        1) 자체처리가 가능한 경우                   (굳이 보고할 필요없고 스스로 해결가능)
        2) 내가 처리 안하고 보고만 할 경우       (스스로 처리 불가능한 일)
        3) 자체처리를 하고 보고해야 되는 경우  (급하니까 일단 수습하고 보고)




   1)
     - 문법을 사용하여 오류를 적절히 처리하여 시스템이 멈추지 않게 한다.
     - 이것이 예외처리 문법의 존재이유이다.

try {
        ...
        } catch ( 파라미터 선언 ) {
        ...
   } catch ( 파라미터 선언 ) {
        ...
        } ...
 



   2)
    - 오류 발생 시 자신이 처리하지 않고 호출자에게 떠 넘긴다.
    - 호출자에게 오류를 넘기기 위해서는 메서드 선언부에 어떤 오류를 넘길지 선언해야 한        다.
    - void method throws 떠넘길오류클래스명, 떠넘길오류클래스명, ... {




   3)
     - 예외 발생 시 1)과 같이 적절한 처리를 한다.
     - 추가적으로 보고도 한다.
     - 예외 발생 상황을 호출자에게 전달할 필요가 있을 때

       try {
        ...
        } catch ( 파라미터 선언 ) {
  throw 보고;
   } catch ( 파라미터 선언 ) {
   throw 보고;
} finally {
       예외 처리
        }

      - finally 블럭은 try...catch 블럭을 탈출하기 전에 반드시 수행된다.





(2) Throwable 클래스

     throw 명령어로 던질 수 있는 인스턴스는 오로지 Throwable 만 가능!
     Throwable 클래스
      - 예외 상황을 보고할 때 사용하는 클래스
 - 보통 예외 상황이 발생했을 때의 정보를 담고 있다.
 - throw 명령어로 해당 객체를 호출자에게 전달한다.
 - 두 타입의 자식 클래스가 있다.
        1) Exception 자식 클래스
            - 애플리케이션에 작업 도중에 발생하는 오류를 표현
            - 이런 예외를 보고 받는 호출자는 반드시 오류 처리를 해야 한다.
            - 만약 오류 처리를 하지 않으면, 컴파일 시 오류가 발생한다.
 RuntimeException : Error와 마찬가지로 호출자에게 던졌을 때
                           오류를 잘 받는지 컴파일러가 검사하지 않는다.
   2) Error 자식 클래스
            - JVM 시스템에서 발생하는 오류를 표현
            - 이런 예외를 보고 받는 호출자는 오류를 처리하지 않아도 컴파일 오류가
  발생하지 않는다.

(3) Exception과 Error 클래스

A라는 개발자와 B라는 개발자가 협업하여 업무를 한다고 하자.
A라는 개발자는 memberDao클래스를 B라는 개발자는 RedApp클래스를 개발할 때
Throw Error를 써서 예외처리를 보낸다고 한다면 오류가 안 보내질 가능성이 크다.

- Error클래스는 JVM시스템에서 발생하는 오류를 표현한다고 했기때문에 JVM에서는 어차피 개발자가 해결할 문제는 아니라고 판단하여 오류 정보를 보내지 않는다.
- 그래서 예외처리를 해서 자신의 클래스를 쓰는 누군가에게 에러정보를 보내고자 한다면 Exception으로 예외처리를 하자.



2.Streaming Programing




- 과거에 윈도우가 나오기 전에는 프린터나 사운드카드,랜카드 같이 하드웨어를 이용하기 위해서는 각 프로그램마다 개발자가 하드웨어에 대한 프로그램을 일일히 개발해야 됬다.
- 윈도우가 나오고부터는 그 하드웨어의 장치정보를 개발하는 것을 하드웨어 회사에 위임하고 Driver 라는 것을 통해서 OS에 설치하여 응용프로그램마다 하드웨어에 대한 설정을 해줄 필요가 없어졌다.

- 위에서처럼 (1)번과 (2)번 과정을 통해 장비에 상관없이 일관된 방법으로 Data를 읽고 쓰기 위해 Streaming Programing이 도입된 것이다. 이로써 개발자들은 하드웨어에 크게 구애받지 않고 본연의 프로그램업무에만 집중할 수 있게 되었다.




3. File




위는 binary와 character를 입력과 출력에 따라 다루는 클래스를 나타내는 것이다.
참고) comma seperated values(csv) : 콤마로 구분해서 txt파일로 저장하는 확장자이다.



(1) 다형성

class Computer {
public void m1() {}

}
test(){
        Computer c = new DesktopPC();
        c.m1();
}

위와 같이 Computer 객체 c는 Computer를 상속받은 클래스 DesktopPC의 인스턴스를 가리키는 것이 가능하다. 다형성 때문에 가능한 일이다.

다형성 : 다형적 변수(polymorphic variables)
 X의 참조 변수는 X의 인스턴스 및 X의 서브 클래스의 인스턴스를 가리킬 수 있다.


(2) Data sink stream class 

  - 데이터를 직접 읽고 쓰는 클래스
  - 예) FileInputStream/FileOutputStream, FileReader/FileWriter
  - ByteArrayInputStream/ByteArrayOutputStream,
  - CharArrayReader/CharArrayWriter
  - StringReader/StringWriter
  - PopedInputStream/PopedOutputStream
  - PopedReader/PopedWriter

(3) Data processing stream class

 - 중간에서 데이터를 가공하는 역할
 - 위의 Data sink stream class를 제외한 모든 클래스
 - 구분하는 방법: 생성자에서 다른 스트림을 요구한다면
 - 이것은 혼자 입.출력을 할 수 없다는 뜻이기 때문에 데이터 가공 클래스라 할 수 있다.






기타)
FileNotFoundException => 파일이 없을 때 생기는 구문
Unhandled exception => 예외를 왜 처리 안했나 물어보는 뜻

*추상클래스
 - sub클래스들의 공통속성이나 기능을 상속해주는 역할, 직접 사용불가, new 인스턴스 생성불가

*인터페이스
 - 쓰는자와 쓰이는 자의 규칙을 정하는 것이다.

* overloading
 - 같은 일을 하는 메서드에 대해 같은 이름을 부여함으로써 프로그래밍의 일관성을 주는 문법이다.

댓글 없음:

댓글 쓰기