본문 바로가기

전체 글147

1. 생성자 대신 정적 팩터리 메서드를 고려하자 객체 생성과 파괴 (feat. 이펙티브자바-2) 객체의 생성과 파괴를 다루겠다. 1. 생성자 대신 정적 팩터리 메서드를 고려 public static boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } - 이름을 가진다. - 호출될 때마다 인스턴스를 새로 생성하지 않는다. - 반환 타입의 하위 타입 객체를 반환할 수 있다. - 매개변수에 따라 다른 객체를 반환할 수 있다. - 상속을 하려면 public이나 protected 생성자가 필요하니, 정적 팩터리 메서드만 제공하면 하위클래스를 만들 수 없다. - 프로그래머가 찾기 힘들가 - of : 매개변수 n개 / 받아 적합한 인스턴스.. 2022. 3. 3.
람다식 -> 메서드 참조 1. 메서드참조 : 람다식을 더 간단히 한 것! 2. 변경방법 : 클래스이름::메서드명 1) 메서드 참조 - 기존 람다식 s -> Integer.parseInt(s) - 메서드 참조 Integer::parseInt 2) 생성자 참조 - 기존 람다식 i -> new MyClass(i); - 메서드 참조 MyClass::new 2) 배열 참조 - 기존 람다식 x -> new int[x] - 메서드 참조 int[]::new; 2022. 3. 1.
함수형 인터페이스 : Predicate 결합 1. 두 Predicate를 하나로 결합 : and(), or(), negate() Predicate p = i -> i i i % 2 == 0; Predicate notP = p.negate(); Predicate all = notP.and(q).or(r); Predicate all2 = notP.and(q.or(r)); 2. 컬렉션 프레임워크 메서드 2-1. List - foreach - removeIf - replaceAll List list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); list.forEach(i -> System.out.print.. 2022. 3. 1.
java.util.function 패키지 (함수형 인터페이스) 1. 자주 사용되는 다양한 함수형 인터페이스 제공 - Supplier : 매개변수X, 반환값O - Comsumer : 매개변수O, 반환값X - Function : 매개변수O, 반환값O - Predicate : 매개변수O, 반환값O (boolean, 조건식) Supplier f = ()->(Math.random()*100)+1; Consumer f = i -> System.out.println(i+", "); Function f = i -> i/10*10; Predicate f = i -> i % 2 ==0; 2. 매개변수 2개 이상 - BiConsumer - BiFunction - BiPredicate 2022. 3. 1.
함수형 인터페이스 1. 함수형 인터페이스 - 단 하나의 추상 메서드만 선언된 인터페이스 - 인터페이스 선언 @FunctionalInterface // 함수형 인터페이스는 단 하나의 추상 메서드만 가져야 함. interface MyFunction { public abstract int max(int a, int b); } 사용방법1. MyFunction f = new MyFunction(){ public int max(int a, int b) { return a>b ? a:b; } } int value1 = f.max(3,5); // 5 사용방법2. MyFunction f2 = (a, b) -> a>b ? a:b; int value2 = f.max(3,5); // 5 EX) 익명 객체를 람다식으로 대체 - 익명 객체 int.. 2022. 3. 1.
람다식 (Lambda Expression) 1. 람다식 - 메서드(함수)를 간단한 '식(expression)' 으로 표현하는 방법 / 이름이 없는 함수(익명 함수) int max(int a, int b) { return a > b ? a : b; } int max(int a, int b) -> { return a > b ? a : b; } (a, b) -> a > b ? a : b 2. 작성시 주의사항 2-1. 매개변수가 하나인 경우 : 괄호() 생략가능(타입이 없을 때만) - (a) -> a*a a -> a*a - (int a) -> a*a (생략 불가능) 2-2. return문이면 괄호{} 생략불가 (그냥 return 생략하자) - (int a, int b) -> { return a > b ? a : b } 2022. 3. 1.