Java Programming for Complete Beginners - in28Minutes Official 강의중 정리내용입니다.

Java 9는 공식적으로 Java Platform Module System (JPMS) 또는 줄여서 '모듈'이라고 알려진 새로운 수준의 추상화를 도입한다.
프로젝트 Jigsaw(JPMS = Java Platform Module System)의 일환으로 모든 Java Platform API는 별도의 모듈들로 쪼개졌다
⇒ 애플리케이션에서 필요한(실제로 사용할) 모듈들만 명시할 수 있게(가질 수 있게) 되었다.
JPMS가 없는 Java 9 이전에는 모든 Java Platform API들을 애플리케이션에 패키징해야 했기 때문에 애플리케이션의 크기가 불필요하게 커지는 문제가 있었다.
타입추론은 말그대로 개발자가 변수의 타입을 명시적으로 적어주지 않고도, 컴파일러가 알아서 이 변수의 타입을 대입된 리터럴로 추론하는 것이다.
자바에서도 var 키워드를 통해 초기화 값이 있는 지역변수(Local Variable)의 타입 추론이 가능하다
var는 멤버변수, 또는 메소드의 파라미터, 리턴 타입으로 사용이 불가능var 은 어떠한 타입도 아니고 예약어가 아니다가령
int var = 3과 같이 사용될 수 있는 것
test(T t) 를 구현하여 arguments를 검증한다.@FunctionalInterface
public interface Predicate<T> {
// 주어진 arguments를 검증하도록 구현
boolean test(T t);
// 다른 Predicate와 연결하는 역할 (&&)
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
// test()의 반대 결과 반환 (ex: true -> false)
default Predicate<T> negate() {
return (t) -> !test(t);
}
// 다른 Predicate와 연결하는 역할 (||)
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
// 동일한지 체크
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
@SuppressWarnings("unchecked")
static <T> Predicate<T> not(Predicate<? super T> target) {
Objects.requireNonNull(target);
return (Predicate<T>)target.negate();
}
}
String Utility 추가
case와 break가 존재한다.break를 누락할 경우 다음 분기로 넘어가게 됨.case -> A와 같은 형식으로 표현이 가능하다.yeild라는 키워드를 사용한다여러문장으로 case 문장을 작성하기 위해서는 {} 으로 코드 블록을 정의한다
블록내의 로직 결과로 값을 리턴하기 위해 yield 키워드를 사용한다
int i = switch (day) {
case MONDAY -> 0;
case TUESDAY -> 1;
default -> {
int k = day.toString().length();
int result = anyMethod(k);
yield result;
}
};
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> 0;
};Reference) https://docs.oracle.com/javase/jp/15/text-blocks/index.html
record Point(int x, int y) { }
RecordName(Header) {Body} 구조getField() 형태가 아닌 field() 형태로 필드명만 사용하면 된다record Point(int x, int y) {
// Implicitly declared fields
private final int x;
private final int y;
// Other implicit declarations elided ...
// Implicitly declared canonical constructor
Point(int x, int y) {
this.x = x;
this.y = y;
}
}private final로 정의된다.##
record Range(int lo, int hi) {
Range {
if (lo > hi) // referring here to the implicit constructor parameters
throw new IllegalArgumentException(String.format("(%d,%d)", lo, hi));
}
}