본문 바로가기

개인 공부89

[이펙티브 자바] 아이템 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.
[이펙티브 자바] 아이템 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.
TIL : @PathVariable vs @RequestParam (20) 🌞 Spring Spring에서 URI로 전달되는 값을 받아오는 방법이 두 가지 존재한다. id가 1인 게시글을 가져올 때 다음과 같이 표현할 수 있다. GET http://xxx.xxx.xxx/api/post?id=1 // query parameter GET http://xxx.xxx.xxx/api/post/1 // path variable 딱 보면 다른데 자세하게 어떤 차이가 있는지 알아보자! 🌀RequestParam GET http://xxx.xxx.xxx/api/post?id=1 이렇게 URI에 쿼리가 들어가는 방식일 때 사용하는 어노테이션이다. 일반적으로 Http GET Method에서 많이 사용한다. 조금 더 자세하게 들어가면 다음 4가지 경우로 많이 사용한다. 1️⃣ Searching @Ge.. 2023. 1. 10.