[JAVA] 스트림(Stream) API(1)
·
Java
스트림(Stream) API 기존의 자바에서는 많은 양의 데이터를 저장하기 위해 배열이나 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하기 위해 컬렉션을 정의해 사용하였다. 컬렉션은 데이터를 저장하는 자료 구조에 따라 핵심이 되는 주요 인터페이스List, Map, Set을 정의하였지만 결국 성격이 다른 자료구조는 사용 방법이 달라 결국 반쪽 짜리 표준화라고 볼 수 있고 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성해야 했다. 이렇게 작성된 코드는 가독성도 떨어지며, 코드의 재사용이 거의 불가능하며 데이터마다 다른 방법으로 접근해야했다. 이러한 문제점을 극복하기 위해서 Jdk 1.8부터 스트림(stream) API가 도입되었..
[JAVA] 람다 표현식(Lambda Expression)
·
Java
람다 표현식(Lambda Expression) 람다 표현식(Lambda Expression)은 간단히 말하자면 함수(메서드)를 간단한 함수 '식(expression)'으로 표현하는 방법을 말한다. // 메서드 int max(int a, int b) { return a > b ? a : b; } 람다식으로 표현하면 메서드 타입/이름, 매개변수의 타입 등의 불필요한 코드를 생략할수 있게 되어 코드가 매우 간결해지고 가독성을 높여준다.. // 람다식 (a,b) -> a > b ? a :b; 이러한 특징들은 람다 표현식을 식별자 없이 실행할 수 있는 함수 표현식을 의미하는 익명 함수(이름이 없는 함수, anonymous function) 라고도 한다. 람다 표현식 작성하기 화살표(->) 가호를 사용하여 람다 표..
[JAVA] 표준 입출력과 File 클래스, 직렬화(Serialization)
·
Java
표준 입출력 자바에서 콘솔과 같은 표준 입출력 장치를 위해 운영체제 시스템과 관련된 기능을 제공하는 클래스 System을 정의해 놓았다. 모든 멤버가 static이기 때문에 별도의 인스턴스를 생성할 필요가 없으며 표준 입출력 관리와, 환경 변수 접근, 시스템 속성, 현재 ms / ns시간 확인, 객체 복사 등에 사용된다. 표준 입출력은 시스템에서 설정을 따르겠다는 뜻으로 일반적으로 표준 입력 장치는 키보드, 표준 출력 장치는 콘솔(console, 화면)을 의미하며 환경에 따라 다른 입출력 소스가 될 수도 있다. System클래스는 표준 입출력을 위해 in, out.error와 같은 클래스 변수를 제공한다. 자료형 멤버 변수 설명 static PrintStream out 표준 출력 스트림 static In..
[JAVA] 버퍼 스트림
·
Java
버퍼(Buffer) 버퍼란 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역을 말한다. 버퍼링 (buffering) 버퍼를 활용하는 방법 또는 버퍼를 채우는 과정을 말한다. 동시에 버퍼는 입력받은 값은 버퍼에 저장해두었다가 버퍼가 가득차거나 개행 문자가 나타나면 버퍼의 내용을 한 번에 전송하게 된다 그렇다면 버퍼를 왜 사용하는 걸까? 입출력을 수행하는데에 있어서 속도차이를 극복하기 위해 사용하는 임시 저장 공간인 버퍼를 사용한다. 예를 들어 입력 장치는 1초당 100개의 데이터를 전송할 수 있고, 출력 장치는 1초당 10개의 데이터를 전송받을 수 있을 때 버퍼가 없다면 입역 장치의 속도를 출력 장치의 속도에 맞춰 입력 장치의 효율이 크게 떨어진다. - 입력 ..
[JAVA] 자바의 입출력과 스트림(I/O stream)
·
Java
스트림(stream) 스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 말한다. 보통 시스템은 여러가지 입출력 장치를 가지고 있고 장치에 따라 입출력 부분을 다르게 구현하면 호환성이 떨어지기 마련이다. 이런 입출력 장치를 다루기 위한 각각의 방법이 있다면 입출력을 사용할때 어떤 데이터 형식을 사용할것인지가 이미 정해져있다는 것을 의미한다. 예를 들어 키보드로 입출력을 받는데 사용되는 입출력 방식, 데이터 형식과 네트워크를 통해 입출력되는 입출력 방식, 데이터 형식이 다르다면 시스템의 다양한 입출력 을 사용하기 위해서는 각각의 입출력 방식, 데이터 형식을 사용자가 이해하고 있어야 사용할 수 있었고 이런 방식은 프로그래밍을 힘들게 한다. 이를 해결하기 위해 자바에서는 파일이나 ..
[JAVA] 쓰레드의 동기화(synchronization)
·
Java
쓰레드의 동기화(synchronization) 쓰레드의 동기화(synchronization)란 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것을 말한다. 싱글 쓰레드 프로세스라면 공유 데이터에 단 하나의 쓰레드 만이 접근하므로 문제가 되지 않는다. 하지만 멀티 쓰레드 프로세스의 경우 두 개 이상의 여러 쓰레드가 자원을 공유하기 때문에 데이터에 동시에 접근하게 된다면 다른 쓰레드에 영향을 미칠 수 있기 때문에 동기화가 필요하다. 동기화를 하지 않을 경우 class Main { public static void main(String args[]) { Runnable r = new RunnableEx13(); // RunnableEx13의 객체 r 생성 new Thread(r,"쓰레드1")..
PP_D
PiggPotato Dev