본문 바로가기

분류 전체보기

(596)
JAVA 스트림 중간 연산, map(), flatmap(), sorted() 1. 스트림 중간 연산의 핵심은 map()과 flatmap() 2. 스트림 중간 연산 - sorted() 연산 Comparator의 comparing()으로 정렬 기준을 제공 studentStream.sorted(Comparator.comparing(Student::getBan)) .forEach(System.out::println); 추가 정렬 기준을 제공할 때는 thenComparing()을 사용 studentStream.sorted(Comparator.comparing(Student::getBan) .thenComparing(Student::getTotalScore() .thenComparing(Student::getName) .forEach(System.out::println); 3. 스트림 중간..
JAVA 람다식 iterate(), generate() a1. 람다식 iterate(), generate() iterate()는 이전 요소를 seed로 해서 다음 요소를 계산한다. Stream evenStream = Stream.iterate(0, n -> n + 2); // 0, 2, 4, 6, ... generate()는 seed를 사용하지 않는다. Stream randomStream = Stream.generate(Math::random); Stream oneStream = Stream.generate(()->1); // 1, 1, 1, 1 ...
JAVA 스트림 14. 스트림 다양한 데이터 소스(컬렉션, 배열)를 표준화된 방법으로 다루기 위한 것 Collections Framework의 사용방법이 드디어 통일됨 JDK 1.8에 나옴 15. Collection을 Stream으로 변환할 수 있음 Stream intStream = list.stream(); 16. 스트림 사용법 1) 스트림 만들기 2) 중간 연산을 n번 수행하기 3) 최종 연산 1번해서 결과 얻기 17. 스트림의 특징 1) 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않는다. 2) 스트림은 Iterator처럼 일회용이다.(필요하면 다시 스트림을 생성해야 함) 3) 스트림은 최종 연산 전까지 중간연산이 수행되지 않는다. (지연된 연산) 지연된 연산이기 때문에 무한 스트림도 사용할 수 있다...
JAVA 메서드 참조 1. 메서드 참조(method reference) 하나의 메서드만 호출하는 람다식은 '메서드 참조'로 간단히 할 수 있다. Function f = (String s) -> Integer.parseInt(s); Function f = Integer::parseInt; // 메서드 참조, 위 코드와 동일한 의미 2. 생성자의 메서드 참조 Function s = (i) -> new MyClass(i); Function s = MyClass::new; // 메서드 참조, 위 코드와 동일한 의미
JAVA 함수형 인터페이스, function 패키지 1. 함수와 메서드의 차이 근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적 2. 함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스 @FunctionalInterface 어노테이션을 붙이면 컴파일러가 문법 체크해줌. 쓰면 좋음. 추상 메서드를 선언할 때 'public abstract'는 생략 가능하다. 인터페이스 함수의 기본이 'public abstract' 니까. 3. 함수형인터페이스 타입의 매개변수는 람다식을 전달하면 된다는 뜻이다. // 선언 void aMethod(MyFunction f){ f.myMethod(); } // 호출 aMethod(()-> System.out.println("myMethod()")); 4. 함..
JAVA 람다식 6. 람다식(Lambda Expression) 함수를 간단한 '식(Expression)'으로 표현하는 방법 블록 안에 문장이 하나뿐일 때 괄호생략 가능하고 끝에 세미콜론(;) 붙이지 않는다 람다식은 익명 함수가 아니라 익명 객체이다..!! 익명 객체이기 때문에 함수형인터페이스 타입 변수로 다뤄야 한다. MyFunctino2 f = (a, b) -> a > b ? a : b;
JAVA 쓰레드 동기화 1. 임계영역 : 한 번에 한 개의 쓰레드만 접근 가능한 영역 synchronized로 임계영역을 설정하는 방법 2가지 public synchronized void calcSum(){ // Do Something } synchronized(참조변수){ // Do Something } 2. wait()과 notify() 동기화의 효율을 높이기 위해 사용 Object 클래스에 정의되어 있으며 동기화 블록 내에서만 사용 가능하다. wait(): 객체의 lock을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다 notify(): waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다. notifyAll(): waiting pool에서 대기중인 모든 쓰레드를 깨운다. Customer 쪽에서는 자..
JAVA 쓰레드 1. 쓰레드의 구현과 실행 1) Thread 클래스를 상속 2) Runnable 인터페이스를 구현 2. JAVA는 쓰레드의 우선순위를 1~10으로 구분한다 JVM에서 정한 게 1~10 실제 OS인 Windows는 32 단계 JVM에서 정한 우선 순위는 희망 사항이어서 반드시 이 순위가 지켜지진 않음. JVM이 OS는 아니기 때문에. 3. 데몬 쓰레드(daemon thread) 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행 일반 쓰레드가 모두 종료되면 자동적으로 종료된다. 반대로 말하면 일반 쓰레드는 자동적으로 종료되지 않음. ex) 가비지 컬렉터(GC), 자동저장, 화면 자동갱신 등 4. 데몬 쓰레드는 보통 무한루프로 구현 프로그램이 언제 종료될지 모르니까. 5. 쓰레드 sleep() 예외 처리를 해야..