Java 16

문자 단위 입출력 스트림

Reader문자 단위 입력 스트림의 최상위 추상 클래스다많은 추상 메소드가 선언되어 있고 이를 하위 스트림이 상속받아 구현한다주요 하위 클래스는 다음과 같다클래스설명FileReader파일에서 문자 단위로 읽는 스트림 클래스InputStreamReader바이트 단위로 읽은 자료를 문자로 변환해주는 보조 스트림 클래스BufferedReader문자로 읽을 때 배열을 제공하여 한꺼번에 읽을 수 있는 기능을 제공하는 보조 스트림주요 메소드는 다음과 같다메서드설명int read()파일로부터 한 문자를 읽는다. 읽은 문자를 반환한다int read(char[] buf)파일로부터 buf 배열에 문자를 읽는다int read(char[] buf, int off, int len)파일로부터 buf 배열의 off 위치로부터 le..

Java 2024.09.26

표준 입출력 스트림

System 클래스의 표준 입출력 멤버public class System{ public static PrintStream out; public static InputStream in; public static PrintStream err; }System 클래스 안에 static 필드여서 지금까지 new를 하지 않고 사용할 수 있었다System.out: 표준 출력 스트림System.in: 표준 입력 스트림System.err: 표준 에러 출력 스트림System.in 사용 예제다음 예제는 문자 하나를 입력 받고 그대로 출력한다import java.io.IOException;public class SystemInTest1 { public static void main(String[] ..

Java 2024.09.19

바이트 단위 입출력 스트림

InputStream바이트 단위 입력 스트림의 최상위 추상 클래스다많은 추상 메서드가 선언되어 있고 이를 하위 스트림이 상속받아 구현한다주요 하위 클래스는 다음과 같다스트림 클래스설명FileInputStream파일에서 바이트 단위로 자료를 읽는다ByteArrayInputStreambyte 배열 메모리에서 바이트 단위로 자료를 읽는다FilterInputStream기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림의 상위 클래스주요 메소드는 다음과 같다메서드설명int read()입력 스트림으로부터 한 바이트의 자료를 읽는다. 읽은 자료의 바이트 수를 반환한다int read(byte b[])입력 스트림으로 부터 b[] 크기의 자료를 b[]에 읽는다. 읽은 자료의 바이트 수를 반환한다int rea..

Java 2024.09.12

IO Stream

입출력 스트림자바는 다양한 입출력 장치에 독립적으로 일관성있는 입출력을 입출력 스트림을 통해 제공한다파일 디스크, 키보드, 마우스, 네트워크, 메모리 등 모든 자료가 입력되고 출력되는 곳입출력 스트림의 구분대상 기준: 입력 스트림 or 출력 스트림자료의 종류: 바이트 스트림 or 문자 스트림기능: 기반 스트림 or 보조 스트림입력 스트림과 출력 스트림입력 스트림: 대상으로부터 자료를 읽어 들이는 스트림이다출력 스트림: 대상으로 자료를 출력하는 스트림이다스트림의 종류종류예시입력 스트림FileInputStream, FileReader, BufferedInputStream, BufferedReader 등출력 스트림FileOutputStream, FileWriter, BufferedOutputStream, Bu..

Java 2024.09.05

wait(), notify()를 활용한 동기화

wait(), notify() 메소드를 활용한 동기화 프로그래밍리소스가 특정 조건에서 더 이상 유효하지 않은 경우 리소스를 기다리기 위해 스레드는 wait 상태가 된다wait 상태 스레드는 notify()가 호출될 때까지 기다린다유효한 자원이 생기면 notify()가 호출되고 wait 상태인 스레드들 중 무작위로 하나의 스레드를 재시작한다notifyAll()을 호출하면 wait 상태인 모든 스레드가 재시작 되고 자원을 갖기 위해 경쟁한다이 경우 유효한 리소스만큼의 스레드만이 실행되고 자원을 갖지 못한 나머지 스레드는 다시 wait 상태가 된다wait(), notify() 사용 예제도서관에서 책을 빌리고 반납하는 예제 코드다import java.util.ArrayList;class FastLibrary {..

Java 2024.08.29

로그 남기기

logging시스템 운영에 대한 기록을 남긴다오류가 발생했을 때 그 오류에 대한 기록을 남겨 디버깅을 용이하게 한다로그 파일에 기록하는 코드를 추가하여 필요한 정보가 로그로 남을 수 있도록 한다디버깅, 시스템 에러 추적, 성능, 문제점 향상들을 위해 사용한다어느정도로 로그를 남겨야 하나너무 적은 로그: 정확한 시스템의 상황을 파악하기 어려움너무 많은 로그: 빈번한 file I/O의 오버헤드와 로그 파일의 백업 문제가 있을 수 있다java.util.logging자바에서 기본적으로 제공하는 log package다파일이나 콘솔에 로그 내용을 출력할 수 있다logging.properties 파일을 편집하여 로그 레벨을 변경할 수 있다로그 레벨은 다음과 같다severewarninginfoconfigfinefine..

Java 2024.08.26

사용자 정의 예외 클래스

사용자 정의 예외 클래스 구현자바에서 제공되는 예외 클래스 이외에도 프로그래머가 직접 만들어야 하는 예외가 필요할 때가 있다만들 때는 기존 예외 클래스 중 가장 유사한 예외 클래스에서 상속 받아 사용자 정의 예외 클래스를 만든다기본적으로 Exception 클래스를 상속해서 만들 수 있다패스워드에 대한 사용자 예외 클래스 만들기패스워드를 입력할 때 다음과 같은 경우에 오류 처리를 한다비밀번호는 null일 수 없다비밀번호의 길이는 5 이상이다비밀번호는 문자로만 이루어져서는 안된다(하나 이상의 숫자나 특수문자를 포함한다)다음은 위 조건에 맞는 예시다class PasswordException extends IllegalArgumentException { public PasswordException(Stri..

Java 2024.08.25

예외 처리하기와 미루기

try-catchtry 블록에는 예외가 발생할 가능성이 있는 코드를 작성하고 예외가 발생하면 catch 블록이 수행된다public class ArrayExceptionHandling { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; try { for (int i = 0; i try-catch-finallyfinally 블록에서 파일을 닫거나 네트워크를 닫는 등 리소스 해제를 구현한다try 블록이 수행되면 finally 블록은 항상 수행된다여러개의 예외 블록이 있는 경우, 각각에서 리소스를 해제하지 않고 finally 블록에서 해제하도록 구현한다catch 블록에 return이 있..

Java 2024.08.24

예외 처리

프로그램 오류컴파일 오류: 프로그램 코드 작성 중 발생하는 문법적 오류다런타임 오류: 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지 되는 오류다. 시스템의 심각한 장애를 발생할 수 있다예외 처리의 중요성프로그램의 비정상 종료를 피해 시스템이 원할하게 실행되게 한다런타임 오류가 발생한 경우 오류의 과정을 재현하는 것은 힘들다오류가 발생한 경우 로그를 남겨서 추후 로그 분석을 통해 원인을 파악해 버그를 수정하는 것이 중요하다예외 클래스시스템 오류(error): 가상 머신에서 발생한다. 프로그래머가 처리할 수 없는 오류다. 동적 메모리가 없는 경우, 스택 메모리 오버플로우등이 있다예외(Exception): 프로그램에서 제어할 수 있는 오류다. 읽어야할 파일이 없거나 네트워크, DB 연결이 ..

Java 2024.08.23

직렬화

Serialization인스턴스의 상태를 그대로 파일로 저장하거나 네트워크로 전송(serialization)하고 이를 다시 복원(deserialization)하는 방식자바에서는 보조 스트림을 활용해 직렬화를 제공한다생성자설명ObjectInputStream(InputStream in)InputStream을 생성자의 매개변수로 받아 ObjectInputStream을 생성합니다.ObjectOutputStream(OutputStream out)OutputStream을 생성자의 매개변수로 받아 ObjectOutputStream을 생성합니다.Serializable 인터페이스구현 코드가 없는 marker interface다transient 키워드를 통해 직렬화 하지 않는 멤버 변수를 지정한다(Socket 등 직렬화 ..

Java 2024.08.23