-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[모던 자바 인 액션] 1주차 #3
Comments
동작 파라미터화(Behavior Parameterization)
public interface ApplePredicate {
boolean test(Apple apple);
}
public class AppleHeavyWeightPredicate implements ApplePredicate {
public boolean test(Apple apple) {
return apple.getWeight() > 150;
}
}
public class AppleGreenColorPredicate implements ApplePredicate {
public boolean test(Apple apple) {
return GREEN.equals(apple.getColor());
}
}
public class AppleRedAndHeavyPredicate implements ApplePredicate {
public boolean test(Apple apple){
return RED.equals(apple.getColor()) && apple.getWeight() > 150;
}
}
// 프레디케이트 객체로 사과 검사 조건을 캡슐화하기
public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p) {
List<Apple> result = new ArrayList<>();
for(Apple apple: inventory) {
if(p.test(apple)) {
result.add(apple);
}
}
return result;
}
// 전달한 ApplePredicate 객체에 의해 fileterApples 메서드의 동작이 결정된다!
List<Apple> redAndHeavyApples = filterApples(inventory, new AppleRedAndHeavyPredicate()); filterApples 메서드가 ApplePredicate 객체를 인수로 받도록 되어 있다. 이렇게 하면 filterApples 메서드 내부에서 컬렉션을 반복하는 로직과 컬렉션의 각 요소에 적용할 동작을 분리할 수 있다는 점에서 큰 이득을 얻게된다. 익명함수자바의 지역 클래스(local class)와 비슷한 개념이다. 익명 클래스는 말 그대로 이름이 없는 클래스다. 익명 클래스를 이용하면 클래스 선언과 인스턴스화를 동시에 할 수 있다. 즉, 즉석에서 필요한 구현을 만들어서 사용할 수 있다. List<Apple> redAndHeavyApples = filterApples(inventory, new ApplePredicate() {
public boolean test(Apple apple) {
return RED.equals(apple.getColor());
}
}); 익명 클래스 단점
람다 표현식람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다의 특징
람다의 구조
List<Apple> redAndHeavyApples = filterApples(inventory, (Apple apple) -> RED.equals(apple.getColor())); |
marp: true
|
1주차 - JDK9~17 previewjdk 버전 별 특징 정리 JDK 9 (2017/09)Modular System
모듈을 선언한 파일 module-info.java 파일을 package root 에 생성 // src/org.astro/module-info.java
module org.astro {
requires org.greetings; // org.greetings 에 대한 종속성을 가짐을 명시
} 모듈내의 구현 파일 // src/org.astro/org/astro/World.java
package org.astro;
import org.greetings;
public class World {
public static String name() {
return "world";
}
} Process API기존에는 process 관련 동작을 수행하려면 직접 커맨드를 수행해야 했다. Runtime.getRuntime().exec("command ..."); Java9 부터는 Process API 를 이용하여 손쉽게 pid를 가져오거나, process kill 을 할 수 있다. ProcessHandle self = ProcessHandle.current();
long pid = self.pid();
self.children().forEach(ProcessHandle::destroy); 새 프로세스를 손쉽게 생성할 수 있다. ProcessBuilder processBuilder = new ProcessBuilder("command ...", "-version");
Process process = processBuilder.inheritIO().start();
ProcessHandle processHandle = process.toHandle(); Immutable Collectionsjava.util 이하 클래스에서 element 목록을 받아 컬렉션 생성하는 기본기능을 제공한다. Set<String> strKeySet = Set.of("key1", "key2", "key3");
List<String> strKeySet = List.of("key1", "key2", "key3"); 기존에는 guave library 등으로 선언했다. (서드파티 의존성 필요) // com.google.common.collect.Lists
List<String> strKeys = Lists.newArrayList("key1", "key2", "key3"); Optional to stream
List<String> filteredList = listOfOptionals.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList()); JDK 10 (2018/03)타입 추론 변수 var (local variable)
var countMap = strings.stream()
.collect(groupingBy(s -> s, counting()));
var maxEntry = countMap.entrySet()
.stream()
.max(Map.Entry.comparingByValue()); 제약조건
주의
Optional.orElseThrow()*기존에는 이제 Exception을 지정해주지않아도 /**
* If a value is present, returns the value, otherwise throws
* {@code NoSuchElementException}.
*
* @return the non-{@code null} value described by this {@code Optional}
* @throws NoSuchElementException if no value is present
* @since 10
*/
public T orElseThrow() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
} JDK 11 (2018/09)
|
스터디 날짜
2023.06.30 9-10
내용
OT - 진행방식 논의
챕터1. 자바8, 9, 10, 11
챕터2. 동작 파라미터화 코드 전달하기
공유
최승위
marp.pdf
이성온
정민교
The text was updated successfully, but these errors were encountered: