Java62 [Spring] @Valid, @Validated과 Custom Annotation (1) 👀 들어가기 앞서 이번에 프로젝트를 진행하다가 DTO와 객체에 대한 유효성 검증을 어떻게 할까 많이 고민했다. 별도로 검증하는 클래스를 만들자니 대상이 많이 없어서 괜히 구현하면 의존성만 커질 것 같았다. 그래서 Annotation을 구현해서 검증을 해보도록 했다. 🤔 왜 사용했나요? 커스텀 어노테이션은 양날의 검이라고 생각한다. 덕지덕지 붙은 어노테이션 불호..! 어노테이션을 까보지 않는 이상 어떤 의도로 동작하는지 정확하게 알 수 없기 때문이다! 하지만 간결함이 큰 강점이기 때문에 고민했다. 이메일을 후보키처럼 사용해 많은 로직에 이메일을 요구했는데, 검증용 클래스가 그만큼 여러 곳에서 사용되었다. 커스텀을 통해서 검증 클래스를 없애 의존성을 줄이고, 서비스 계층에 들어오기 전에 처리하고 싶었다. 추.. 2023. 3. 19. [이펙티브 자바] 아이템 18 : 상속보다 컴포지션을 사용하라 🎯 학습 목표 상속과 캡슐화 컴포지션이란? (feat. DI) 📌 상속보단 컴포지션 이번 아이템에서 상속의 문제점과 왜 컴포지션을 사용해야 하는지 이야기하고 있다. 우선 상속을 지양해야하는 이유를 알아보자. 🧐 상속과 캡슐화 책에서는 상속이 캡슐화를 깨뜨린다고 말한다. 하지만 나는 '상속이 캡슐화를 깰 수도 있다'라는 말이 맞다고 생각한다. 상속의 문제점은 다음과 같다. 상속은 결합도를 크게 높여 유연성을 떨어트린다. Java에서는 모호성 때문에 다중상속을 지원하지 않는다. (다이아몬드 문제) 이런 문제들이 존재함에도 코드의 중복을 줄이는 강력한 수단임은 틀림없다. 따라서, 정말로 'is - a" 관계일 때만 상속을 사용해야 한다. 👀 컴포지션이란? (feat. DI) 한 객체에서 다른 객체를 포함하는 .. 2023. 2. 14. [이펙티브 자바] 아이템 15 : 클래스와 멤버의 접근 권한을 최소화하라 🎯 학습 목표 접근 권한을 최소화 (feat. 캡슐화) package-private @NoArgsConstructor와 접근 범위 📌 접근 권한을 최소화? Java를 공부한 사람이라면 접근 권한을 보자마자 접근 지정자를 떠올렸을 것이다. 그냥 읽으면 다 흡수하지 못할 내용들이다. 이번 아이템을 통해서 캡슐화를 다시 공부해 보자. 😎 캡슐화? 그거 알긴 알지 우리가 공부하는 Java가 OOP란 사실은 누구나 안다. 또한, 캡슐화가 무엇인지도 알고 있다. 잘 공부한 사람이라면 이번 내용을 읽고 한 번에 이해가 되거나 와닿았을 것이다. 근데 나는 아니니까 다시 공부했다. 🥲🥲 💊 캡슐화 캡슐화란? 연관된 속성과 기능을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것을 말한다. 객체지향에선 "묻지 말고 시.. 2023. 2. 8. [이펙티브 자바] 아이템 13 : clone 재정의는 주의해서 진행하라 🎯 학습 목표 Cloneable 인터페이스란? 재정의 시 문제점 변환 생성자, 변환 팩토리 📌 clone 재정의 시 주의하기! 이번 아이템은 clone()을 사용할 때 주의점을 다룬다. 그러기에 앞서 Cloneable이 뭔지 알아보자! 💡 Cloneable 인터페이스 Cloneable Interface란? 일종의 maker interface로 'cloen에 의해 복제할 수 있다'를 표시하는 인터페이스이다. Java에서는 인스턴스의 복제를 위해 clone() 메서드가 구현되어 있다. 신기하게도 이 메서드는 Cloneable 내부에 구현되어 있을 거란 예상을 깨고 java.lang.Object 클래스에 protected 접근 지정자로 구현되어 있다. 내부에는 구현해야 할 메서드가 하나도 없다! 사용법과 주의.. 2023. 2. 1. [이펙티브 자바] 아이템 10 : equals는 일반 규약을 지켜 재정의하라 🎯 학습 목표 Equals의 재정의 고려할 규약들 📌 Equals의 재정의 equals를 오버라이딩하는 것은 NPE를 던지거나 원하는 대로 작동하지 않을 가능성이 높다. 재정의를하지 않고 그대로 equals를 사용하게 된다면 인스턴스는 자기 자신만 같다고 표현한다. ✍️ 동일성 vs 동등성 : 동일성은 같은 참조인지 동등성은 같은 값을 가지는지 판단 🤔 언제 하지 말아야 할까? 1️⃣ 각 인스턴스가 본질적으로 고유 값이 아닌 동작을 나타내는 인스턴스는 같은 인스턴스가 애초에 없다. (Ex. Thread) Object의 equals로 충분하다. 2️⃣ 인스턴스의 논리적 동치성을 검사할 일이 없다. 논리적 동치성을 검사할 일이 없다는 것은 단순 동일성을 검사한다는 의미이다. Object의 equals로 충분.. 2023. 1. 31. [이펙티브 자바] 아이템 7 : 다 쓴 객체 참조를 해제하라 🎯 학습 목표 GC(Garbage Collector)의 동작 메모리를 관리하는 객체 📌 객체 참조를 해제하라! C 계열 개발자가 부러워하는 GC는 개발자가 직접적으로 메모리를 관리하지 않아도 되게 해준다. 하지만 GC가 있다고 절대적으로 메모리 누수가 발생하지 않는 것은 아니다. 책에는 다음과 같은 예시를 제공한다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e).. 2023. 1. 31. 이전 1 2 3 4 5 6 7 8 ··· 11 다음