본문 바로가기

언어공부

(188)
자바 - 입출력(I/O), 스트림(stream), 바이트 기반 스트림(InputStream, OutputStream), 문자(텍스트) 기반 스트림(Reader, Writer) 자바 입출력(I/O)과 스트림(stream)에 대해서 알아보자. 입출력(I/O) I/O란 Input과 Output의 약자로 입력과 출력, 간단히 줄여서 입출력이라고 한다. 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 예를 들어 키보드로부터 데이터를 입력받는다든가 System.out.println()을 이용해서 화면에 데이터를 출력한다던가 하는것이 가장 기본적인 입출력의 예이다. 스트림(stream) 자바에서 입출력을 수행하려면, 즉 어느 한쪽에서 다른쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것을 스트림(stream)이라고 정의한다. 데이터를 운반하는데 사용되는 연결통로로 볼 수 있다. 스트림은 연속적인 데이터의..
자바 예외 처리 방법 - finally키워드, try-with-resources 문장(jdk 1.7) 자바 예외 처리 방법인 finally키워드에 대해서 알아보자. finally 키워드 finally키워드 블록은 예외의 발생여부에 상관없이 실행되어야 할 코드를 포함시킬 목적으로 사용된다. try-catch문의 끝에 선택적으로 덧붙여 사용될 수 있으며, try-catch-finally의 순서로 구성된다. 예외가 발생한 경우에는 try-catch-finally로 실행되며, 예외가 발생하지 않은 경우에는 try-finally로 실행된다. 코드가 try문에서도 정상적으로 마쳐도 실행되어야 하거나, 예외가 발생해도 실행되어야 할때, finally에서 코드를 정의해 주는것이 좋다. a/b01에서 ArithmeticException 예외가 발생하므로 예외발생1이 출력되고, finally 블록이 실행된다. try-wi..
자바 예외 처리 방법 - throw 키워드, throws 키워드, 사용자 정의 예외 자바 예외 처리 방법인 throw 키워드, throws 키워드에 대해서 알아보자. throw 키워드 불필요한 데이터 전송이 있어 잘 안쓰이는 키워드로, 예외를 일부러 발생시킬 때 사용하는 키워드이다. 형식은 throw new 예외 클래스 생성자; 이다. throws 키워드 throws 키워드는 발생된 예외를 자신이 직접 처리하는 것이 아니라 자신을 호출한 곳으로 떠넘기는 역할을 한다. 형식은 접근제어자 리턴타입 메소드명(매개변수) throws Exception1, Exception2, ... { } 이다. 예외를 선언하면, 이 예외뿐만 아니라 그 자손타입의 예외까지도 발생할 수 있다. 메소드의 선언부에 예외를 선언함으로써 메소드를 사용하려는 사람이 메소드의 선언부를 보았을 때, 이 메소드를 사용하기 위해..
자바 예외 처리 방법 - try-catch문, printStackTrace()와 getMessage() 자바 예외 처리 방법에 대해서 알아보자. 프로그램의 실행도중에 발생하는 에러는 어쩔 수 없지만, 예외는 프로그래머가 이에 대한 처리를 미리 해주어야 한다. 예외처리(exception handling)란 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이며, 예외처리의 목적은 프로그램의 갑작스런 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것이다. 에러와 예외는 모두 실행 시 발생하는 오류(runtime error)이다. 발생한 예외를 처리하지 못하면, 프로그램은 비정상적으로 종료되며, 처리되지 못한 예외는 JVM의 예외처리기가 받아서 예외의 원인을 화면에 출력한다. try-catch문 하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록..
자바 프로그램 오류 및 Exception과 RuntimeException 자바 프로그램 오류 및 Exception과 RuntimeException에 대해서 알아보자. 프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 컴파일 에러 : 컴파일 시 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 '에러(error)'와 '예외(exception)' 두가지로 구분한다. 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 에러는 ..
자바 wait()과 notify() 자바 wait()과 notify()에 대해서 알아보자. synchronized로 동기화 해서 공유 데이터를 보호하는 것은 좋지만, 특정 쓰레드가 객체의 락을 가진 상태로 오랜 시간을 보내지 않도록 해야한다. 만일 계좌에 출금할 돈이 부족해 한 쓰레드가 락을 보유한 채로 돈이 입금될 때까지 계속 기다리면 다른 쓰레드 들은 해당 객체의 락을 기다리느라 다른 작업들이 원활하지 않을 것이다. 이러한 상황을 개선하기 위해 wait()과 notify()가 있다. 동기화된 임계 영역의 코드를 수행하다가 작업을 더 이상 진행할 상황이 아니면, wait()을 호출해 쓰레드가 락을 반납하고 기다리게 한다. 그러면 다른 쓰레드가 락을 얻어 해당 객체에 대한 작업을 수행할 수 있게 된다. 나중에 작업을 진행할 수 있는 상황이..
자바 쓰레드 동기화(synchronization) 자바 쓰레드 동기화(synchronization)에 대해서 알아보자. 동기화(synchronization) 싱글쓰레드 프로세스의 경우 프로세스 내에서 단 하나의 쓰레드만 작업하기 때문에 프로세스의 자원을 가지고 작업하는데 별 문제가 없지만, 멀티쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내에 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 된다. 만일 쓰레드A가 작업하던 도중에 다른 쓰레드B에게 제어권이 넘어갔을 때, 쓰레드A가 작업하던 공유데이터를 쓰레드B가 임의로 변경하였다면, 다시 쓰레드A가 제어권을 받아서 나머지 작업을 마쳤을 때 의도했던 것과는 다른 결과를 얻을 수 있다. 이러한 일을 방지하기 위해서 쓰레드의 동기화가 필요하며, 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간..
자바 쓰레드 스케쥴링 메소드-sleep(), interrupt(), suspend(), resume(), stop(), join(), yield() 자바 쓰레드 스케쥴링 메소드에 대해서 알아보자. sleep() sleep()은 지정된 시간동안 쓰레드를 멈추게 한다. 메소드 형식은 아래와 같다. static void sleep(long millis), static void sleep(long millis, int nanos) 밀리세컨드와 나노세컨드의 시간단위로 세밀하게 값을 지정할 수 있지만, 어느 정도의 오차가 발생할 수 있다. 쓰레드가 0.0015초 동안 멈추게 하려면 sleep(1, 500000);로 주면 된다. sleep()에 의해 일시정지 상태가 된 쓰레드는 지정된 시간이 다 되거나 interrupt()가 호출되면, InterruptedException이 발생되어 잠에서 깨어나 실행대기 상태가 된다. 그래서 sleep()을 호출할 때는 항상 ..