본문 바로가기

개인 공부185

[이펙티브 자바] 아이템 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.
[토비의 스프링] 테스트 (2장) 2.1 UserDaoTest 다시 보기 2.1.1 테스트의 유용성 UserDao에서 관심을 분리하고 기능을 확장할 때 테스트가 없었다면 불안했을 것이다. 머릿속으로 시뮬레이션을 돌려보는 방법은 100% 확신할 수 없기 때문에 테스트란 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지 확신할 수 있게 해주는 작업이 필요하다. 2.1.2 UserDaoTest의 특징 웹을 통한 DAO 테스트 방법의 문제점 웹 화면을 통한 테스트는 가장 흔히 쓰이는 방법이지만 단점이 너무 많다. 테스트를 위해 사용되는 자원이 많기 때문에 DAO만 테스트하고 싶은데 다른 곳에서 문제가 발생할 수 있다. 작은 단위의 테스트 테스트 수행 과정을 간단히 하고 오류를 쉽게 찾을 수 있게 하기 위해서 작은 단위로 쪼개는 것이 중요하다.. 2023. 1. 16.
[이펙티브 자바] 아이템 6 : 불필요한 객체 생성을 피하라 🎯 학습 목표 Why?? String Constant Pool Wrapper 클래스 📌 불필요한 객체 생성 피하기 불필요한 객체 생성에 대한 이야기는 아이템 1에서 잠깐이나마 엿볼 수 있었다. 인스턴스를 캐싱해 두면 불필요한 객체 생성을 피할 수 있다고 했다. 🤔 왜 피해야 할까? Java를 조금이라도 공부했다면 GC(Gabage Collection)의 존재를 알 것이다. 메모리를 하나하나 관리해야하는 C언어와 다르게 이 GC가 알아서 메모리의 누수를 방지해 주기 때문이다. 하지만 GC이 아무리 좋아져도 무분별한 객체 생성은 성능을 저하시킨다. 즉, 성능 때문에 피해야한다. 👀 언제 그럴까? 책에서 제시하는 예시와 함께 언제 불필요한 객체가 생성되는지 알아보자. 1️⃣ String String s = n.. 2023. 1. 15.
[이펙티브 자바] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 ✍️ 학습 목표 의존 객체 주입 패턴 📌 의존 객체 주입 패턴 일반적으로 객체는 여러 자원들과 의존한다. 예를 들어, 자동차라는 객체는 부품들에 의존하고 책의 예시는 맞춤법 검사기는 사전에 의존한다. 의존한다는 말은 관계를 가진다, 즉 서로가 서로에게 영향을 주는 것을 말한다. 🤔 왜 필요하지? 책에서 제시된 예시들을 보면 금방 이해할 수 있다. 1️⃣ 정적 클래스를 사용 public class SpellChecker { private static final Dictionary dictionary = new Dictionary(); private SpellChecker() { } public static boolean isValid(String word) { return false; }; public s.. 2023. 1. 15.