728x90

Java 3

이펙티브 자바 - 아이템 21: 인터페이스는 구현하는 쪽을 생각해 설계하라

Default Method 자바8에서, 기존의 구현체를 깨뜨리지 않고, 비교적 안전하게 인터페이스에 메소드를 추가하는 방법 기존에는 메서드 하나를 추가하려면 해당 인터페이스를 구현하는 모든 클래스에서는 해당 메서드를 모두 구현해줘야 했다. 하지만, 디폴트 메서드를 이용하면 인터페이스의 기분 구현을 그대로 상속하므로 인터페이스에 자유롭게 새로운 메서드를 추가할 수 있게 된다. 호환성을 유지하면서 API를 바꿀 수 있는 것이다. java8의 java.util.Collection 인터페이스 java7의 Collection 인터페이스는 원래 removeIf 메소드가 없었다. Collection (Java Platform SE 7 ) Collection (Java Platform SE 7 ) Compares th..

Java & Spring 2023.05.08

이펙티브 자바 - 아이템 18 : 상속보다는 컴포지션을 사용하라

상속은 캡슐화를 위반할 수 있다 캡슐화 : 객체의 상태와 행동을 하나의 단위로 묶고, 외부에는 상태를 감추고 행동만을 노출시키는 것 상속을 통해 메소드 재정의를 수행할 수 있는데, 이는 캡슐화를 해칠수 있다. 릴리스마다 내부 구현이 달라질 수 있는 상위 클래스로 인해 하위 클래스가 오동작 할 수 있기 때문이다. 따라서 이미 구현된 class의 상속을 지양하고, implement 상속을 사용하는 것이 좋다. 하위 클래스의 오작동 : self-use 패턴을 사용했을 때 자기 사용 self-use : 자신의 다른 부분을 사용하는 것 / 한 메소드가 같은 클래스 내의 다른 메서드를 사용하는 패턴 public class InstrumentedHashSet extends HashSet { private int ad..

Java & Spring 2023.04.24

Spring AOP - AOP 기본 개념

Spring AOP - 1편 AOP는 여러 오브젝트에 나타나는 공통적인 부가 기능을 모듈화하여 재사용하는 기법이다. SRP에 따르면, 클래스를 변경하는 이유은 하나다. 만약, 어떤 로그인 서비스의 수행시간을 측정하기 위해 측정 로직은 서비스 내에 넣는다면, 서비스 로직 말고 부가 기능이 비즈니스 로직을 위한 서비스 코드에 포함된다. 맞는 접근일까? 수행시간을 측정하고, 트랜잭션을 처리하고, 권한을 체크하는 등의 부가 기능 작업은 모두 일종의 인프라 로직이다. 인프라 로직 어플리케이션의 전 영역에서 나타날 수 있다. 중복 코드를 만들어낼 가능성 때문에 유지보수가 힘들어진다. 비즈니스 로직과 섞여 있으면, 비즈니스 로직을 이해하기가 어려워진다. 인프라 로직은 각자의 관심사가 있다. 인프라 로직의 중복이 횡단..

Java & Spring 2023.04.19
728x90