Language 98

[JAVA] File과 Files 클래스

java.io 패키지와 java.nio.file 패키지는 파일과 디렉토리 정보를 가지고 있는 File과 Files 클래스를 제공한다. Files는 File을 개선한 클래스로, 좀 더 많은 기능을 가지고 있다. File 클래스File 클래스로부터 File 객체를 생성하는 방법은 다음과 같다.File file = new File("경로"); 경로 구분자는 운영체제마다 조금씩 다르다. 윈도우에서는 \\ 또는 /를 둘 다 사용할 수 있고, 맥 OS 및 리눅스에서는 /를 사용한다. 다음은 윈도우에서 File 객체를 생성하는 코드이다.File file = new file("C:/Temp/file.txt");File file = new FIle("C:\\Temp\\file.txt"); File 객체를 생성했다고 해서..

Language/JAVA 2024.10.22

[JAVA] 보조 스트림 - 객체 스트림

객체 스트림자바는 메모리에 생성된 객체를 파일 또는 네트워크로 출력할 수 있다. 객체를 출력하려면 필드값을 일렬로 늘어선 바이트로 변경해야 하는데, 이것을 직렬화(serialization)라고 한다. 반대로 직렬화된 바이트를 객체의 필드값으로 복원하는 것을 역직렬화(deserialization)이라고 한다. ObjectInputStream과 ObjectOutputStream은 객체를 입출력할 수 있는 보조 스트림이다. ObjectOutputStream은 바이트 출력 스트림과 연결되어 객체를 직렬화하고, ObjectInputStream은 바이트 입력 스트림과 연결되어 객체로 복원하는 역직렬화를 한다. 다음은 ObjectInputStream과 ObjectOutputStream 보조 스트림을 연결하는 코드이다..

Language/JAVA 2024.10.22

[JAVA] 보조 스트림 - 프린트 스트림

프린트 스트림PrintStream과 PrintWriter는 프린터와 유사하게 출력하는 print(), println(), printf() 메서드를 가지고 있는 보조 스트림이다. 지금까지 우리는 콘솔에 출력하기 위해 System.out.println()을 사용하였는데, 그 이유는 out이 PrintStream 타입이기 때문이다. PrintStream은 바이트 출력 스트림과 연결되고, PrintWriter는 문자 출력 스트림과 연결된다.PrintStream ps = new PrintStream(바이트 출력 스트림);PrintWriter pw = new PrintWriter(문자 출력 스트림); PrintStream과 PrintWriter는 거의 같은 메서드를 갖고 있다. println() 메서드는 출력할 데..

Language/JAVA 2024.10.22

[JAVA] 보조 스트림 - 기본 타입 스트림

기본 타입 스트림바이트 스트림에 DataInputStream과 DataOutputStream 보조 스트림을 연결하면 기본 타입인 boolean, char, short, int, long, float, double 값을 입출력할 수 있다. 다음은 DataInputStream과 DataOutputStream 보조 스트림을 연결하는 코드이다.DataInputStream dis = new DataInputStream(바이트 입력 스트림);DataOutputStream dos = new DataOutputStream(바이트 출력 스트림); 다음은 DataInputStream과 DataOutputStream이 제공하는 메서드를 보여준다.DataInputStreamDataOutputStreambooleanbytech..

Language/JAVA 2024.10.22

[JAVA] 보조 스트림 - 성능 향상 스트림

성능 향상 스트림CPU와 메모리가 아무리 뛰어나도 하드 디스크의 입출력이 늦어지면 프로그램의 실행 성능은 하드 디스크의 처리 속도에 맞춰진다. 네트워크로 데이터를 전송할 때도 느린 네트워크 환경이라면 컴퓨터 사양이 아무리 좋아도 메신저와 게임의 속도는 느릴 수밖에 없다. 이 문제에 대한 완전한 해결책은 될 수 없지만, 프로그램이 입출력 소스와 직접 작업하지 않고 중간에 메모리 버퍼와 작업함으로써 실행 성능을 향상시킬 수 있다. 출력 스트림의 경우 직접 하드 디스크에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보냄으로써 출력 속도를 향상시킬 수 있다. 버퍼는 데이터가 쌓이기를 기다렸다가 꽉 차게 되면 데이터를 한꺼번에 하드 디스크로 보냄으로써 출력 횟수를 줄여 준다. 입력 스트림에서도 버퍼를 사용하면 읽..

Language/JAVA 2024.10.22

[JAVA] 보조 스트림 - 문자 변환 스트림

보조 스트림보조 스트림이란 다른 스트림과 연결되어 여러 가지 편리한 기능을 제공해 주는 스트림을 말한다. 보조 스트림은 자체적으로 입출력을 수행할 수 없기 때문에 입출력 소스로부터 직접 생성된 입출력 스트림에 연결해서 사용해야 한다. 입출력 스트림에 보조 스트림을 연결하려면 보조 스트림을 생성할 때 생성자 매개값으로 입출력 스트림을 제공하면 된다.보조스트림 변수 = new 보조스트림(입출력스트림); 예를 들어 바이트 입력 스트림인 FileInputStream에 InputStreamReader 보조 스트림을 연결하는 코드는 다음과 같다.InputStream is = new FileInputStream("...");InputStreamReader reader = new InputStreamReader( is..

Language/JAVA 2024.10.21

[JAVA] 문자 입출력 스트림

문자 입출력 스트림바이트 입출력 스트림은 InputStream과 OutputStream에 대응하는 문자 입출력 스트림으로 Reader와 Writer가 있다. 입출력되는 단위가 문자인 것을 제외하고는 바이트 입출력 스트림과 사용 방법은 동일하다. 문자 출력Writer는 문자 출력 스트림의 최상위 클래스로, 추상 클래스이다. 모든 문자 출력 스트림 클래스는 Writer클래스를 상속받아서 만들어진다.리턴 타입메서드설명voidwrite(int c)매개값으로 주어진 한 문자를 출력voidwrite(char[] cbuf)매개값으로 주어진 배열의 모든 문자를 출력voidwrite(char[] cbuf, int off, int len)매개값으로 주어진 배열에서 cbuf[off]부터 len개 까지의 문자를 출력voidw..

Language/JAVA 2024.10.21

[JAVA] 바이트 입출력 스트림

입출력 스트림데이터는 키보드를 통해 입력될 수 있고, 파일 또는 프로그램으로부터 입력될 수도 있다. 반대로 데이터는 모니터로 출력될 수도 있고, 파일에 저장되거나 다른 프로그램으로 전송될 수 있다. 이것을 총칭해서 데이터 입출력이라고 한다. 자바는 입력 스트림과 출력 스트림을 통해 데이터를 입출력한다. 스트림은 단방향으로 데이터가 흐르는 것을 말한다. 프로그램을 기준으로 데이터가 들어오면 입력 스트림, 데이터가 나가면 출력 스트림이 된다. 프로그램이 다른 프로그램과 데이터를 교환하려면 양쪽 모두 입력 스트림과 출력 스트림이 필요하다. 어떤 데이터를 입출력하냐에 따라 스트림은 두 종류로 구분할 수 있다.바이트 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력할 때 사용문자 스트림 : 문자..

Language/JAVA 2024.10.21

[JAVA] 람다식 참조

메서드 참조메서드 참조는 말 그대로 메서드를 참조해서 매개변수의 정보 및 리턴 타입을 알아내 람다식에서 불필요한 매개변수를 제거하는 것을 목적으로 한다. 예를 들어 두 개의 값을 받아 큰 수를 리턴하는 Math 클래스의 max() 정적 메서드를 호출하는 람다식은 다음과 같다.(left, right) -> Math.max(left, right); 람다식은 단순히 두 개의 값을 Math.max() 메서드의 매개값으로 전달하는 역할만 하기 때문에 다소 불편해 보인다. 이 경우에는 다음과 같이 메서드 참조를 이용하면 매우 깔끔하게 처리할 수 있다.Math :: max; 정적 메서드와 인스턴트 메서드 참조정적 메서드를 참조할 경우에는 클래스 이름 뒤에 :: 기호를 붙이고 정적 메서드 이름을 기술한다.클래스 :: ..

Language/JAVA 2024.10.21

[JAVA] 람다식

람다식이란?함수형 프로그래밍이란 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법을 말한다. 데이터 처리부는 데이터만 가지고 있을 뿐, 처리 방법이 정해져 있지 않아 외부에서 제공된 함수에 의존한다. 데이터 처리부는 제공된 함수의 입력값으로 데이터를 넣고 함수에 정의된 처리 내용을 실행한다. 동일한 데이터라도 함수 A를 제공해서 처리하는 결과와 함수 B를 제공해서 처리하는 결과는 다를 수 있다. 이것이 함수형 프로그래밍의 특징으로, 데이터 다형성이라고도 볼 수 있다. 자바는 함수형 프로그래밍을 위해 Java 8부터 람다식을 지원한다. 람다식은 위 그림과 같이 데이터 처리부에 제공되는 함수 역할을 하는 매개변수를 가진 중괄호 블록이다. 데이터 처리부는 람다식을 받아 매개변수에 데이터를..

Language/JAVA 2024.10.21