728x90
반응형
💡 람다(Lambda)
💬 람다식의 형식
◾ ( 인수목록 ) -> { 본체 }
💬 원론적인 람다식
◾ ( int i ) -> { System.out.println(i+1); }
💬 예시
// 정수형 인수 i를 받아 이 값에 1 더한 값을 리턴한다. (int i) -> {return i+1;} // 다음 함수와 같다. int addone(int i) { return i+1; } // 인수가 두 개일 때 (a, b) -> a > b ? a : b // 인수가 없을 때 () -> System.currentTimeMillis()
💬 람다식 활용, 스레드 생성문을 단 한줄로 줄일 수 있다.
new Thread() -> System.out.print("스레드가 출력한 문장")).start();
💡 추상화
💬 클래스
◾ 다중 상속하기 위해 abstract화 한다.
◾ interface가 다중 상속을 할 수 있다.
💬 메소드
◾ 오버라이딩 할 수 있다.
💬 변수
◾ 인스턴스화가 안된다. (상수와 비슷하다.)
💡 외부 변수 액세스
◾ 로컬 클래스는 소속 메서드의 지역변수를 액세스할 수 있다.
◾ 람다식도 마찬가지이다.
◾ 람다식에서의 this는 람다식을 실행한 객체를 의미한다.
◾ ⭐ @FunctionalInterface 애노테이션을 붙이면 하나의 메서드만 허용한다.
📃 람다식을 사용해보자
💻 Console
📝 LambdaTest 클래스
package stream;
import java.io.*;
public class KeyboardStream {
static String fname;
public static void main(String[] args) {
int idata = -1;
// InputStreamReader : InputStream을 Reader로 변환시킨다.
// Reader : 문자 단위로 입력을 수행한다, 추상 클래스이기 때문에 하위 클래스를 사용해서 구현해야 한다.
Reader isr = new InputStreamReader(System.in); // 출력시 in -> out 변경
System.out.println("키보드에서 문자입력[마지막에 엔터]");
System.out.println("------------------------");
try {
while (true) {
// 한 문자만 입력할 수 있게 하는 read 메서드
idata = isr.read();
if (idata == -1)
break;
System.out.print((char) idata);
}
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
💡 스트림(Stream)
💬 스트림?
◾ 입출력 장치, 메모리, 네트워크 등의 데이터 발생지나 목적지로 일련의 데이터가 들어오거나 나가는 처리를 정의해둔 것이다.
◾ 스트림에 연결하여 다른 처리를 해 주는 필터
💬 버퍼
◾ 임시기억장치 - KeyBoard Buffer, Monitor Buffer
◾ 기억장치 - Register, CPU (용량 부족)
◾ 보조기억장치 - USB, Hard Disk, 플로피디스크 (용량 부족 해결)
📃 스트림을 사용해보자
📝 BufferIOStream 클래스
package stream;
import java.io.*;
class BufferIOStream {
// 예외 처리할 때, throws 사용
// try-catch문과의 차이점 : 특정 부분만 예외 처리를 하는게 아니라 클래스 단위로 예외 처리를 할 수 있어 throws가 try-catch문보다 강력하다.
public static void main(String[] args) throws IOException{
System.out.println("문자를 입력하고 [엔터] 치세요");
InputStreamReader isr = new InputStreamReader(System.in);
// 버퍼 입출력 스트림 사용
BufferedReader br = new BufferedReader(isr); // isr 객체를 매개변수로 사용
System.out.print("입력한 문자 : ");
String str = br.readLine(); // 한 줄 읽는다.
System.out.print(str);
System.out.println();
System.out.println("출력 스트림 : ");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("버퍼 스트림 출력 : ");
// 메모리를 비워준다. - java에서는 JVM이 있기 때문에 꼭 사용할 필요 없다.
bw.flush();
}
}
💡 입출력 스트림과 관련된 필터 스트림
스트림 | 관련된 리더/라이터 | |
입력 | InputStream | InputStreamReader |
FileInputStream | FileReader | |
FilterInputStream | FilterReader | |
BufferedInputStream | BufferedReader | |
DataInputStream | ||
출력 | OutputStream | OutputStreamReader |
FileOutputStream | FileWriter | |
FilterOutputStream | FilterWriter | |
BufferedOutputStream | BufferedWriter | |
DataOutputStream | ||
PrintStream | PrintWriter |
💡 입력 바이트 스트림
클래스 | 서브클래스 | 기능 설명 | |
ByteArrayInputStream | 바이트 배열로부터 데이터를 읽어 들일 때 사용 | ||
FileInputStream | 파일을 읽어 들일 때 사용 | ||
FilterInputStream | 줄의 수 모니터링, 버퍼링, 원시데이터의 입력 등의 기능. 다음의 서브 클래스 제공 | ||
BufferInputStream | 버퍼링을 사용하여 입력에 사용 | ||
CheckedInputStream | 데이터의 신뢰성을 향상시키기 위하여 읽혀지는 데이터의 체크섬을 사용 | ||
DataInputStream | 기본 데이터 형식으로 데이터를 읽어들일때 사용 | ||
LineNumberInputStream | 입력 라인의 수를 세는데 사용 | ||
PushbackInputStream | 바이트를 읽고 여러개의 바이트로 구성된 병합 형태를 형성하며, 한 개의 문자를 스트림으로 밀어넣는 기능에 사용 | ||
ObjectInputStream | 프로그램에서 주로 활용하며, 객체 형태의 데이터를 읽을 때 사용 | ||
PipedInputStream | PipedOutputStream으로부터 읽기를 지원하는 기능 | ||
SequenceInputStream | 단일 스트림으로 FileInputStream을 연결할 때 사용 | ||
StringBufferInputStream | 문자열을 버퍼링을 사용하여 입출력에 사용 |
💡 InputStream 클래스가 제공하는 대표적인 메소드
메소드 | 설명 |
abstract int read() | 입력 스트림으로부터 1 바이트(한 문자)를 읽고, 읽은 문자를 int 형으로 반환한다. 스트림의 끝일 경우에는 -1을 반환한다. 읽어들인 데이터를 문자로 사용할 경우에는 데이터를 char형으로 캐스팅해 주어야 한다. |
int read(byte[] b) | 입력 스트림으로부터 바이트 배열 b의 크기만큼 읽어온다. |
int read(byte[] b, int off, int len) | 입력 스트림으로부터 시작위치인 off부터 len의 길이만큼 읽어서 바이트 배열 b의 크기만큼 입력한다. |
int read(char[] cbuf) | 입력 스트림으로부터 char 배열 cbuf의 크기만큼 읽어온다. |
int available() | 현재의 입력 스트림으로부터 지연되지 않고 읽어 들일 수 있는 바이트의 수를 반환한다. |
void close() | 해당 입력 스트림을 닫는다. |
long skip(long n) | 입력 스트림으로부터 읽어들인 데이터를 n 바이트 크기만큼 건너뛰게 된다. |
void mark(int readlimit) | 입력 스트림의 현재 위치를 표시한다. 후에 reset() 메소드를 사용하여 이 위치를 찾을수 있도록 해준다. |
boolean markSupported() | 입력 스트림이 표시(mark) 작업을 지원하면 true, 지원하지 않으면 false를 반환한다. |
void reset() | mark() 메소드의 마지막 호출이 지정한 위치로 입력 스트림의 위치를 다시 위치시킨다. |
💡 OutputStream 클래스가 제공하는 대표적인 메소드
메소드 | 설명 |
abstract void write(int b) | 출력 스트림에 1 바이트(한 문자)를 출력한다. int형의 정수를 인수로 받지만 byte로 자동 캐스팅된 후에 출력된다. |
void write(byte[] b) | 출력 스트림에 바이트 배열 b의 크기만큼 출력한다. |
void write(byte[] b, int off, int len) | 시작위치인 off부터 len의 길이만큼, 출력 스트림에 바이트 배열 b의 크기만큼 출력한다. |
void write(char[] cbuf) | 출력 스트림에 char 배열 cbuf의 크기만큼 출력한다. |
void close() | 출력 스트림을 닫는다. |
void flush() | 버퍼에 남아있는 데이터를 출력 스트림에 출력한다. 보통 출력 스트림에 들어있는 데이터는 어느 정도 내부 버퍼에 데이터가 쌓일 때까지 기다렸다가 출력하는것을 flush() 메소드를 써서 바로 출력한다. |
💡 Reader 클래스가 제공하는 메소드
메소드 | 설명 |
int read() | 하나의 문자를 읽어서 int 형으로 반환한다. |
int read(char[] cbuf) | 입력 스트림으로부터 char 배열 cbuf의 크기만큼 읽어온다. |
abstract int read(char[] cbuf, int off, int len) | 입력 스트림으로부터 시작위치인 off부터 len의 길이만큼 읽어서 char 배열 cbuf의 크기만큼 읽어온다. |
int read(CharBuffer target) | 입력 스트림으로부터 문자 버퍼인 target으로 문자들을 읽어온다. |
boolean ready() | 입력 스트림으로부터 읽을 준비가 되었으면 true, 그렇지 않으면 false를 반환한다. |
abstract void close() | 입력 스트림을 닫는다. |
void mark(int readlimit) | 입력 스트림의 현재 위치를 표시한다. 후에 reset() 메소드를 사용하여 이 위치를 찾을수 있도록 해준다. |
boolean markSupported() | 입력 스트림이 표시(mark) 작업을 지원하면 true, 지원하지 않으면 false를 반환한다. |
void reset() | mark() 메소드의 마지막 호출이 지정한 위치로 입력 스트림의 위치를 다시 위치시킨다. |
long skip(long n) | 입력 스트림으로부터 n 크기만큼의 문자를 읽어서 건너뛴다. |
💡 Writer 클래스가 제공하는 메소드
메소드 | 설명 |
void write(String str) | 문자열 str을 출력 스트림에 출력한다. |
void write(String str, int off, int len) | 시작위치인 off부터 len의 길이만큼, 문자열 str을 출력 스트림에 출력한다. |
abstract void close() | 출력 스트림을 닫는다. |
abstract void flush() | 출력 스트림을 비운다. 버퍼에 남아있는 데이터를 출력 스트림으로 전송한다. |
728x90
반응형
'Language > JAVA' 카테고리의 다른 글
[JAVA] while (n-- > 0) 의미 (0) | 2024.02.11 |
---|---|
[JAVA] BufferedReader, BufferedWriter (+ StringTokenizer) 입출력 사용법 (0) | 2024.02.09 |
JAVA 12일차 - 실습문제 02 수정 (0) | 2022.07.06 |
JAVA 12일차 - 실습문제 02 (0) | 2022.07.05 |
JAVA 12일차 - 열거형(Enumerated), 스레드 (0) | 2022.07.05 |
댓글