본문 바로가기

자바프로그래밍

java16.stream.aggregate /* 집계(count(),sum(),average(),max(), min()...) 집계(aggregate)는 최종처리기능으로 요소들을 처리해서 갯수, 합계, 평균, 최대/최소값 등과 같이 하나의 값으로 집계하는 기능을 말한다. 집계는 대용량의 데이터를 가공해서 축소하는 reduction이라고 볼 수 있다. 스트림이 제고하는 기본집계 메서드는 1. count() : 요소의 갯수를 long타입으로 리턴 2. findFirst() : 첫번째 요소를 OptionalXXX타입으로 리턴 3. max(Comparator) : 요소중 최대요소를 OptionalXXX타입으로 리턴 4. min(Comparator) : 요소중 최소요소를 OptionalXXX타입으로 리턴 5. average() : 요소들의 평균값을 Opt.. 더보기
java16.stream.pipeline /* 스트림 파이프라인? 대량의 데이터를 가공해서 축소하는 것을 일반적으로 리덕션(Reduction)이라고 하는데, 데이터의 합계, 평균, 카운팅, 최대/최소값 등이 대표적인 reduction의 결과이다. 그러나 컬렉션의 요소를 리덕션의 결과물로 바로 집계할 수 없을 경우에는 집계하기 편리하도록 필터링, 매핑, 그룹핑등의 중간처리를 할 것이 필요하다. 1. 중간처리와 최종처리 스트림은 데이터의 필터링, 매핑, 정렬, 그룹핑등의 중간처리와 합계, 평균 등의 최종처리를 파이프 라인(Pipe Line)으로 해결한다. 파이프라인은 여러개의 스트림이 연결되어 있는 구조를 말한다. 중간스트림이 생성될 때 요소들이 바로 중간처리 되는 것이 아니라 최종처리가 시작되기 전까지는 중간처리가 지연(lazy)된다. 최종처리가.. 더보기
java16.stream.intro /* Stream(스트림) 스트림은 java8부터 추가된 컬렉션, 배열에 저장된 요소(값 or 객체)를 하나씩 꺼내와서 람다식(Functional Interface) 으로 처리할 수 있도록 해주는 반복자이다. Java7까지는 List컬렉션에서 요소를 순차적으로 처리하기 때문에 iterator 를 사용해 왔지만 컬렉션의 Stream()메서드로 Stream객체를 얻은 후에 람다식으로 컬렉션의 요소를 하나씩 처리할 수 있게 되었다. Iterator와 Stream을 비교해보면 Stream을 사용하는 것이 훨씬 단순하게 사용할 수 있다. Stream은 Iterator와 비슷한 역할을 하는 반복자이지만 1. 람다식으로 처리할 수 있다. 2. 내부반복자를 사용함으로써 병렬처리가 쉽다. 3. 중간처리, 최종처리작업을 .. 더보기
java15.collection /* 컬렉션프레임워크(Collection Framework) 애플리케이션을 개발하다 보면 다수의 객체를 저장해서 필요할 때마다 꺼내서 사용하는 경우가 많다. 이러한 객체를 효율적으로 추가, 삭제, 검색을 할 경우에 가장 간단한 방법은 배열을 이용하는 것이다. 배열은 쉽게 생성하고 사용할 수 있지만 저장객체의 크기가 배열생성시에 고정되기 때문에 불특정 다수의 객체를 저장하거나 관리하기에는 문제가 많다. 자바는 배열의 이러한 문제점을 해결하기 위해 자료구조(Data Structure)를 바탕으로 객체를 효율적으로 추가, 삭제, 검색할 수 있도록 java.util패키지에 컬렉션과 관련된 인터페이스와 구현클래스를 포함시켜 놓았다. 이들을 총칭해서 컬렉션프레임워크라고 한다. 컬렉션프레임워크에는 몇가지 인터페이스를.. 더보기
java14.lambda 람다람다 /* 람다식(Lambda Expression) 자바는 함수형 프로그래밍을 위해 Java8버전부터 람다식을 지원하면서 기존의 코딩 패턴이 많이 달라졌다 람다식은 수학자 알론조 처리(Alonzo Church)가 발표한 계산법에서 사용된 수학식의 표현으로 이를 제자인 존 메카시(Jjon McCarthy)가 프로그래밍언어에 도입했다. 람다식은 익명함수를 생성하기 위한 식으로 객체지향언어보다 함수지향언어에 가깝다. 자바에 람다식을 수용한 이유가 자바코드가 매우 간결해지고 컬렉션의 요소를 필요하거나 매핑에서 원하는 결과를 쉽게 집계할 수가 있기 때문이다. 람다식의 형태는 매개변수를 가진 코드블럭이지만 런타임시에는 익명구현 객체를 생성한다. 1. 기본문법 (arg,...)->{실행문...} 람다식에서는 런타임시에 대.. 더보기
java13.generic 슬슬 어려워져,,,그래도 화이팅 ㅎ /* 제네릭(Generic) 자바 5부터 제네릭타입이 새롭게 추가되었다. 제네릭타입을 사용하게 되면 잘못된 타입이 사용되는 가능성을 컴파일단계부터 제거할 수 있게 되었다. 제네릭은 컬렉션, 람다식, 스트림, NIO(New Input Out)에 널리 사용되기 때문에 제네릭을 이해하지 못한다면 자바의 API문서등을 이해할 수 없다. 제네릭은 클래스와 인터페이스, 메서드를 정의할 때 타입을 매개값으로 사용할 수 있도록 한다. 타입파라미터는 코드 작성시에 구체적인 타입으로 선언되어서 다양한 객체들을 생성할 수 있도록 한다. 제네릭을 사용하는 이점은 1. 컴파일시에 강한 타입체크를 할 수 있다. 자바 컴파일러는 코드에서 잘못 사용되는 타입때문에 발생하는 문제들을 사전에 제거하기.. 더보기
java12.thread public class BeepMain2 { public static void main(String[] args) throws InterruptedException { // Thread객체를 만드는 방법 // 1. 외부에 클래스 생성(BeepTask1, Runnable 구현) // 띵소리5번 // Runnable beepTask = new BeepTask1(); // Thread thread1 = new Thread(beepTask); // thread1.start(); // 2. 익명객체(인터페이스) // Thread thread2 = new Thread(new Runnable(){ // @Override // public void run() { // // //띵소리 5번 // Toolkit toolk.. 더보기
java11.basic_API.time /* java.time패키지 java7이전 까지는 Date와 Calendar클래스를 이용하여 날짜와 시간정보를 얻을 수 있었다. 하지만 Date클래스의 대부분의 메서드는 deprecated되었고 Date의 용도는 단순히 특정시점의 날짜정보만 저장하는 역할만 한다. Calendar클래스는 날짜와 시간정보를 얻기에는 충분하지만 날짜와 시간을 조작하거나 비교하기에는 불충분하다. 그래서 java8버전부터는 날짜와 시간을 나타내는 여러가지 API를 추가했다. 이 API는 java.util 패키지에는 없고 별도의 java.time패키지로 제공된다. */ public class TimeMain1 { public static void main(String[] args) throws InterruptedException.. 더보기