728x90
반응형

Effective Java 67

[Effective Java] 아이템 44. 표준 함수형 인터페이스를 사용하라.

🎯 아이템 44. 표준 함수형 인터페이스를 사용하라. 필요한 용도에 맞는 게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하라. public class Item44 { public static void main(String[] args) { /** * 1 Supplier */ Supplier supplier = () -> "hello world"; System.out.println("supplier = " + supplier.get()); Supplier doubleSupplier = () -> Math.random(); System.out.println("doubleSupplier = " + doubleSupplier.get()); printRandomDoubles(doubleSupplie..

Java 2023.03.22

[Effective Java] 아이템 43. 람다보다는 메서드 참조를 사용하라.

🎯 아이템 43. 람다보다는 메서드 참조를 사용하라. 람다가 익명 클래스보다 나은 점 중에서 가장 큰 특징은 간결함이다. 그런데 자바에는 함수 객체를 심지어 람다보다도 더 간결하게 만드는 방법이 있으니, 바로 메서드 참조다. 하지만, 메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰고, 그렇지 않을 때만 람다를 사용하라. 메서드 참조를 사용했을때 더 짧고 명확한 소스 List sortedOrders = orders.stream() .sorted(comparing(Order::getCreatedAt)) .map(Order::getId) .collect(Collectors.toList()); 좀 더 짧고 명확한 소스가 되었다. 하지만, 클래스명이 너무 길거나 더 명확하다고 판단되지 않는다면 람다를 사용하자..

Java 2023.03.22

[Effective Java] 아이템 42. 익명 클래스보다는 람다를 사용하라.

🎯 아이템 42. 익명 클래스보다는 람다를 사용하라. 예전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용했다. 이런 인터페이스의 인스턴스를 함수객체라고 하여, 특정 함수나 동작을 나타내는 데 썼다. 익명 클래스의 인스턴스를 함수 객체로 사용 - 낡은 기법이다! public class Item43 { public static void main(String[] args) { List list = new ArrayList(); list.add("test3"); list.add("te2st3"); list.add("test4"); list.add("5test3"); Collections.sort(list, new Comparator() { @Override public int ..

Java 2023.03.21

[Effective Java] 아이템 40. @Override 애너테이션을 일관되게 사용하라, 아이템 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라.

🎯 아이템 40. @Override 애너테이션을 일관되게 사용하라. 재정의한 모든 메서드에 @Override 애너테이션을 의식적으로 달면 실수 했을때 컴파일리가 알려줄 것이다. 예외는 한 가지뿐이다. 구체 클래스에서 상위 클래스의 추상 메서드를 재정의한 경우엔 이 애너테이션을 달지 않아도 된다. 🎯 아이템 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라. 마커 인터페이스와 마커 애너테이션은 각자의 쓰임이 있다. 새로 추가하는 메서드 없이 단지 타입 정의가 목적이라면 마커 인터페이스를 선택하자. 클래스나 인터페이스 외의 프로그램 요소에 마킹해야 하거나, 애너테이션을 적극 활용하는 프레임워크의 일부로 그 마커를 편입시키고자 한다면 마커 애너테이션이 올바른 선택이다. 따라서 ElementType...

Java 2023.03.21

[Effective Java] 아이템 39. 명명 패턴보다 애너테이션을 사용하라.

🎯 아이템 39. 명명 패턴보다 애너테이션을 사용하라. 명명 패턴의 이슈 오타가 나면 안된다. 올바른 프로그램 요소에서만 사용되리라 보증 할 방법이 없다. 프로그램 요소를 배개변수로 전달할 마땅한 방법이 없다. 이러한 문제를 해결하기 위해 애너테이션을 사용하자! @Aspect @Component public class SessionAspect { private static final String VO_SETTING_EXPRESSION = "execution(* com.inno.backoffice..*Mapper.insert*(..))" + " || execution(* com.inno.backoffice..*Mapper.update*(..))" + " || execution(* com.inno.backo..

Java 2023.03.21

[Effective Java] 아이템 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라.

🎯 아이템 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라. 인터페이스를 이용해 확장 가능 열거 타입을 흉내 냈다. public interface Operation { double apply(double x, double y); } public enum BasicOperation implements Operation{ PLUS("+") { public double apply(double x, double y) { return x + y; } }, MINUS("-") { public double apply(double x, double y) { return x - y; } }, TIMES("*") { public double apply(double x, double y) { return ..

Java 2023.03.21
728x90
반응형