728x90
반응형

인터페이스 5

[Effective Java] 아이템 65. 리플렉션보다는 인터페이스를 사용하라.

🎯 아이템 65. 리플렉션보다는 인터페이스를 사용하라. 리플렉션은 복잡한 특수 시스템을 개발할 때 필요한 강력한 기능이지만, 단점도 많다. 컴파일타임에는 알 수 없는 클래스를 사용하는 프로그램을 작성한다면 리플렉션을 사용해야 할 것이다. 단, 되도록 객체 생성에만 사용하고, 생성한 객체를 이용할 때는 적절한 인터페이스나 컴파일타임에 알 수 있는 상위 클래스로 형변환해 사용해야 한다. @Before(VO_SETTING_EXPRESSION) public void setVO(JoinPoint joinPoint) { Object[] objects = joinPoint.getArgs(); if(SecurityContextHolder.getContext().getAuthentication()!= null) { In..

Java 2023.03.29

[Effective Java] 아이템 64. 객체는 인터페이스를 사용해 참조하라.

🎯 아이템 64. 객체는 인터페이스를 사용해 참조하라. 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. /* 할인 정책 인터페이스 */ public interface DiscountPolicy { int discount(Member member, int price); } /* 정액 할인 클래스 */ public class FixDiscountPolicy implements DiscountPolicy{ private int discountFixAmount = 1000; // 1000원 할인 @Override public int discount(Member member, int price) { ... } } /* 정률 할인 클래스 */ public cl..

Java 2023.03.29

[Effective Java] 아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라.

🎯 아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라. ⭐ 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 잇는 타입 역할을 한다. 달리 말해, 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 애기해주는 것이다. 인터페이스는 오직 이 용도로만 사용해야한다. 상수 인터페이스 안티패턴 - 사용 금지! public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23; // 전자 질..

Java 2023.03.20

[Effective Java] 아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라.

⭐ 자바 8에 와서 기존 인터페이스에 메서드를 추가할 수 있도록 디폴트 메서드를 소개했지만 그 위험이 완전히 사라진 것은 아니다. 자바 8에서는 핵심 컬렉션 인터페이스들에 다수의 디폴트 메서드가 추가되었다. 주로 람다를 활용하기 위해서다. 하지만, 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어려운 법이다. 자바 8의 Collection 인터페이스에 추가된 디폴트 메서드 default boolean removeIf(Predicate

Java 2022.05.24

[Effective Java] 아이템 20. 추상 클래스보다는 인터페이스를 우선하라.

⭐ 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. public class Marine implements GroundAttackUnit, Comparable { private String name; private int health; @Override public int compareTo(Marine o) { return Integer.compare(health, o.getHealth()); } /* 인터페이스 override 생략 */ ... /* getter, setter 생략 */ ... } 이처럼 자바 플랫폼에서도 Comparable, Iterable, AutoCloseable 인터페이스가 새로 추가됐을 때 표준 라이브러리의 수많은 기존 클래스가 이 인터페이스들을 구현한 채 릴리..

Java 2022.05.24
728x90
반응형