본문 바로가기

Dev/Effective Java6

6. 아이템[6] - 불필요한 객체생성을 피하라 1. 서론 포스팅에 대한 코드는 여기에서 보실 수 있습니다. 2. 본론 Q. 객체를 자주 생성함에도 불구하고 그 비용이 크다면 어떻게 해야할까? A. 객체 하나를 재사용 하는 것이 나을 때가 많다. 1. 같은 값이지만 다른 레퍼런스를 가지는 경우 예시를 들어보자. @Test @DisplayName("a, b는 같다.") public void test(){ String a = "java"; String b = "java"; assertSame(a,b); } @Test @DisplayName("a, b는 다르다.") public void test2(){ String a = "java"; String b = new String("java"); assertNotSame(a,b); } 아래는 객체를 새로 생성하게.. 2021. 2. 2.
5. 아이템[5] - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 1. 서론 지난 포스팅에서는 인스턴스를 막기 위해 private 한 생성자를 사용하라는 내용에 대해 배웠습니다. 코드는 여기에서 보실 수 있습니다. 이번 포스팅에서는 자원을 직접 명시하는 것이 아닌, 의존 객체 주입을 사용하는 것에 대해 포스팅하겠습니다. 2. 본론 인스턴스를 생성할 때, 생성자에 필요한 자원을 넘겨주는 방식을 이용하면, 사용하는 자원에 따라 동작이 달라지는 클래스에 유동적으로 사용할 수 있다. 이 방법을 사용해서 클라이언트가 자신이 명시한 타입의 하위 타입이라면 무엇이든 생성할 수 있는 팩터리를 넘길 수 있다. 저번에 Fruit 클래스를 만든 것을 활용하여 간단한 예제를 구현해 보았다. package com.study; import java.util.Objects; class Fruit.. 2021. 1. 23.
4. 아이템[4] - 인스턴스화를 막으려거든 private 생성자를 사용하라 1. 서론 지난 시간에는 private한 생성자를 만들어 인스턴스를 생성하는 것을 방지하고, public 한 정팩매를 만들어 같은 인스턴스를 보장해주는 방법에 대해 포스팅했습니다. 덧붙여 enum 타입을 이용하여 싱글 ENUM을 생성, 처리하는 방법도 배웠습니다. 이번 포스팅에서는 인스턴스화를 막기 위한 구체적인 방법론을 제시해줍니다. 포스팅에 대한 코드는 여기에서 보실 수 있습니다. 2. 본론 Q. 인스턴스화를 막아야 하는 상황이 있을까? 초보 개발자라 잘 모르겠어. A. 구글링해보았는데, 싱글톤 패턴을 쓰는 이유와 비슷한 것 같습니다. 메모리 낭비 방지 및 객체 로딩시간이 절대적으로 중요한 경우, 인스턴스화를 막아놓는 것이 유리할 수 있습니다. 아니면 자신의 생각대로 코드가 움직이기를 바랄 때 쓰이기.. 2021. 1. 12.
3. 아이템[3] - private 생성자나 열거 타입으로 싱글턴임을 보증하라 1. 서론 저번 포스팅에서는 매개변수가 많다면, 빌더타입을 고려하라는 지침에 대해 배웠습니다. 점층적 생성자 타입, 자바빈즈를 거쳐 빌더타입의 탄생?을 보는 역사를 공부해보았습니다. 이번에는 private 한 생성자나 열거 타입을 지정해서 싱글톤임을 보증하는 법에 대해 포스팅해보려합니다. 2. 본론 Q. 싱글톤은 뭘까? 들어는 봤는데,, 자세하겐 몰라! A. 싱글톤은 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 생존범위는 App 안 입니다. Q. 해당 클래스는 하나의 인스턴스를 만들기 위해 존재한다니.. 먼가 대단히 중요한 일을 하는 것 같아! A. 한번 객체가 생성되면 그 하나의 인스턴스로 앱 내에서 살아가야 합니다. 다른 메모리를 사용하지 않기 때문에 메모리 낭비가 없죠. 또한, 전역적.. 2021. 1. 11.