본문 바로가기

전체 글56

Java | 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글톤과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다.이 자원 들을 클래스가 직접 만들게 해서도 안 된다.대신 필요한 자원을 (혹은 그 자원을 만들어주는 팩터리를) 생성자(정적 팩터리, 빌더)에 넘겨주자.의존 객체 주입이라 하는 이 기법은 클래스의 유연성, 재사용성, 테스트 용이성을 개선해준다. 이유사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다.인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식의존 객체 주입생성자, 정적 팩터리, 빌더.. 2024. 7. 4.
Java | 인스턴스화를 막으려거든 private 생성자를 사용하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심의도치 않게 클래스가 인스턴스화 되는 것을 막기 위해서는 prviate 생성자를 추가해라 이유추상 클래스로 만든다고 하더라도 하위 클래스를 만들어 인스턴스화 하면 같은 문제가 생긴다. 관련 코드 및 예시// 기본 생성자가 만들어지는 것을 막기 위함public class ExampleClass { private ExampleClass() { throw new AssertionError(); }}주석을 다는 것도 좋은 방법이다. 2024. 7. 4.
Java | private 생성자나 열거 타입으로 싱글턴임을 보증하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다.핵심열거 타입 방식의 싱글턴 - 바람직한 방법원소가 하나인 열거 타입을 선언하자. 이유싱글턴(sigleton)이란?인스턴스를 오직 하나만 생성할 수 있는 클래스클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려워진다.싱글턴을 만드는 방식private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련한다.장점명백히 싱글톤임이 들어남간결함 ... public static final Elvis INSTANCE = new Elvis(); ...정적 팩터리 메서드를 public static 멤버로 제공API를 바꾸지 않고도 싱글턴이 .. 2024. 7. 4.
Java | 생성자에 매개변수가 많다면 빌더를 고려하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심생성자나 정적 팩터리가 처리해야 할 매개 변수가 많다면, 빌더 패턴을 선택하는 것이 낫다.매개변수 중 다수가 필수가 아니거나 같은 타입이라면 특히 더 그렇다. 빌더는 점층적 생성자보다 클라이언트 코드를 읽고 쓰기 훨씬 간결하고, 자바빈즈보다 훨씬 안전하다. 이유1. 점층적 생성자 패턴도 쓸 수 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다.점층적 생성자 패턴은 생성자에 매개변수를 점차 늘려가며 필요한 생성자를 사용하는 것2. 자바빈즈 패턴 - 일관성이 깨지고, 불변으로 만들 수 없다.자바빈즈 패턴은 매개변수가 없는 생성자로 객체를 만들고 setter로 메서드.. 2024. 7. 4.
Java | 생성자 대신 정적 팩터리 메서드를 고려하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다.핵심정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적으로 장단점을 이해하고 사용할 것.그러나 정적 팩터리를 사용하는 게 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관은 고치자. 이유1. 이름을 가질 수 있다.반환될 객체의 특성을 쉽게 묘사2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.이로인해 불변 클래스(Immutable class)는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성 피함플라이웨이트 패턴(Flyweight pattern)과 비슷한 기법인스턴스 통제(Instance-co.. 2024. 7. 4.
프로젝트 | redis 적용 및 최적화 도전기 작성된 글의 프로젝트https://github.com/Fingoo-org/Fingoo GitHub - Fingoo-org/FingooContribute to Fingoo-org/Fingoo development by creating an account on GitHub.github.com 들어가기 전외부 API에서 주식, 금융 등의 관련 지표를 불러오는 로직이 프로젝트에 많은 부분을 차지하게 되었습니다. 이렇게 외부 API를 사용하게 되면 해당 기능을 직접 프로젝트에 구현하지 않아도 된다는 장점이 있지만, 그만큼 해당 API 서비스에 의존하게 되기 때문에 최소한으로 사용하고자 했습니다.그럼에도 사용하게 될 API 발생했고, 이번에는 기왕 사용할 API의 데이터를 Redis를 활용해서 캐싱함으로써, exp.. 2024. 6. 19.