문자 기반의 스트림은 무엇이 있을까? 문자기반 스트림 종류 --Reader & writer문자기반의 스트림들의 부모다. 문자기반 스트림은단순히 2byte로 스트림을 처리하지 않고자바에서 사용하는 유니코드(UTF-16) 간의 변환을 자동으로 처리해 준다. FileReader & FileWriter파일로부터 텍스트 데이터를 읽고, 파일에 작성하는 데 사용된다. 사용 예시 코드class Test { public static void main(String args[]) { try { String fileName = "test.txt"; FileInputStream fis = new FileInputStream(fileName); ..
바이트 기반의 스트림은 어떤 것들이 있을까? 바이트기반 스트림 종류 --InputStream & OutputStream모든 바이트기반 스트림의 부모이며 아래와 같은 메서드들을 제공한다. markSupported()를 통해서 mark()와 reset()을 지원하는 스트림인지 확인 후스트림의 종류에 따라서 mark()와 reset()을 사용하면 이미 읽은 데이터를 되돌려서 다시 읽을 수 있다.flush()는 버퍼가 있는 출력 스트림의 경우에만 의미가 있으며,OutputStream에 정의된 flush()는 아무런 일도 하지 않는다.프로그램이 종료될 때 사용하고 닫지 않은 스트림은 JVM이 자동으로 닫아 주기는 하지만,스트림을 이용해서 모든 작업을 마치면 close()를 호출하여 반드시 닫아 주어야 ..
입출력의 스트림은 무엇인가? 스트림 (Stream) --다양한 데이터를 표준화된 방법으로 다루기 위해 사용하는 "스트림"과는 다른 개념으로입출력에서 사용하는 "스트림"은데이터를 운반하는 데 사용되는 연결 통로를 의미한다. 스트림은 단방향 통신만 가능하므로"입력 스트림", "출력 스트림" 총 2개의 스트림이 존재한다. 입력 스트림 : 프로그램을 기준으로 데이터를 받는 것출력 스트림 : 프로그램을 기준으로 데이터를 내보내는 것스트림은 먼저 보낸 데이터를 먼저 받으며, 연속적으로 데이터를 주고받기 때문에 FIFO 구조라고 생각하면 된다.그래서 위 그림에서 "world"를 출력할 때 d, l, r, o, w로 전달된다.-- 바이트기반 스트림 (InputStream, OutStream) ..
스트림은 무엇이며, 어떻게 사용할까? 스트림 (Stream) --스트림은다양한 "데이터 소스"를 표준화된 방법으로 다루기 위한 방법이며,효율적으로 처리하고 변환하기 위해 사용된다. 데이터 소스는 컬렉션(List, Set, Map 등)이나 배열 같이 여러 데이터들을 관리하는 것을 의미 그래서 컬렉션 또는 배열 등 여러 데이터를 관리하는 기능에서는 Stream을 지원하여Stream을 사용하면 모두 동일한 방법으로 작업을 처리할 수 있게 된다. 스트림에서 제공하는 연산 2가지중간 연산 : 연산 결과가 스트림인 연산 (즉, 계속 연산을 이어서 진행 가능)최종 연산 : 연산 결과가 스트림이 아닌 최종 값인 연산 (즉, 더 이상 연산 불가능) 다양한 데이터 소스를 가지고 Stream을 만들고 나면..
람다식은 어떻게 사용할까? 람다식 (Lambda Expression) --람다식은자바에서 "익명 함수"를 간단히 표현하는 방식으로,함수형 프로그래밍을 지원하기 위해 도입된 표현 방식이다.주로 코드의 간결성과 가독성을 높이고, 함수형 인터페이스와 함께 사용된다. 람다식 기본 문법(매개변수) -> { 실행할 코드 }매개변수 : 입력값을 지정하는 부분으로, 만약 매개변수가 하나뿐이라면 괄호()를 생략할 수 있다.화살표 연산자 : 매개변수와 실행 코드를 구분한다.실행 코드 : 동작할 코드를 작성하는 부분으로, 만약 한 줄 뿐이라면 중괄호{}를 생략할 수 있다. 메서드와 람다식// 메서드int max(int a, int b) { return a > b ? a : b;}// 람다식(a,..
스레드의 동기화는 무엇이며, 어떻게 사용할까? 스레드의 동기화 --멀티 스레드 프로세스는여러 스레드가 같은 자원을 공유해서 사용하기 때문에다른 스레드의 작업에 영향을 미칠 수가 있다.(A스레드가 작업 도중에 B스레드로 차례가 넘어갔을 경우 B스레드에 영향을 줄 수 있다.) 이를 방지하기 위해서는 "동기화"가 필요하다.(진행 중인 작업이 다른 스레드에게 간섭을 받지 않게 하는 것) 즉, 스레드의 동기화는한 스레드가 진행 중이던 작업을 다른 스레드가 접근하지 못하게 막는 것이다. 동기화하는 방법은?간섭을 받으면 안되는 코드들을 "임계 영역"으로 묶어서 설정한다. 임계 영역이란?락(Lock)이라는 자물쇠를 얻은 단 하나의 스레드만 출입이 가능하도록 하는 영역이다.(객체 하나당 1개의 락을 보유) --..
스레드의 상태 종류는 무엇이 있고, 어떻게 제어할까? 스레드의 상태 종류 -- 동작 흐름스레드 객체 생성 => "NEW"start() 메서드를 통해 스레드 호출 => 바로 실행되는 것이 아니라 "실행대기(RUNNABLE)"상태에서 자기 차례를 기다린다."실행대기"에서 자기 차례 도달=> 자동으로 "실행(RUNNABLE)"상태로 이동하여 실행한다."실행" 상태에서 주어진 실행시간이 완료되거나 yield() 호출=> 다시 "실행대기"로 돌아가 다시 차례를 기다린다."실행" 상태에서 도중에 [suspend(), sleep(), wait(), join(), I/O block 등]이 발생=> "일시정지"상태로 이동하여 잠시 해당 작업을 보류한다. "일시정지" 상태에 보류중인 ..
스레드는 어떻게 동작할까? 프로세스와 스레드 --프로세스는실행 중인 프로그램을 의미하고,이때 프로세스는 "자원(메모리, CPU 등)"과 "스레드"로 구성되어 있다. 스레드는프로세스 내에서 "자원"을 가지고 실제 작업을 수행하는 무언가로모든 프로세스는 무조건 하나 이상의 스레드를 가지고 있다. 비유프로세스 = 공장스레드 = 직원(일꾼)-- 싱글 스레드 & 멀티 스레드 --싱글 스레드하나의 프로세스가 하나의 스레드만 사용하는 방식이다. 특징작업을 하는 스레드가 하나뿐이라서 모든 작업이 순차적으로 처리된다.(A작업을 하고 있었다면 해당 작업을 모두 끝내야 다음 작업을 할 수 있다.)구현이 단순하고 디버깅이 쉽다.다만 모든 작업이 순차적으로 처리되기 때문에 작업 시간이 긴 작업이 있으면 다..