본문 바로가기

반응형

Effective Java 3rd

(8)
Item 17. 변경 가능성을 최소화하라 (불변(immutable) 객체) 정의 객체 생성 이후에는 객체의 상태가 바뀌지 않는 객체 장점 이해하기 쉽고 안정적인 서비스 개발에 도움이 된다. immutable 객체는 map, set, cache에 쓰기에 적절하다. (일반적으로) thread-safe 하다. race condition 없이 여러 스레드에서 공유해서 사용할 수 있다. 불변 객체를 필드로 쓰면 방어적 복사를 할 필요가 없다. String 은 java의 대표적인 불변 객체 사용 방식 public final class Test { private final int parameter1; private final RGB rgb; public Test(String paramter1, RGB rgb) { this.parameter1 = parameter1; this.rgb = ne..
Item 6. 불필요한 객체 생성 금지 Boxing type 대신 Primitive Type 을 권장한다. Util Class 에서 또한 Primitive type 을 권장한다. 그렇다고 항상 primitive type이 옳은 것은 아니다. 대표적인 Null case에 대해 price가 0인 것과 null인 것의 의미는 다르다. Boxing type은 null을 가질 수 있다. 주의해야 할 내장 Method 위와 같이 isEmailValid를 할 때 매 번 Pattern 인스턴스를 생성하는 꼴이다. Pattern instance가 한 번만 생성되게끔 하려면 위와 같이 static하게 Pattern instance를 낭비하지 않게 만들 수 있다. 주의 무심결에 Instance를 과도하게 생성하지는 않았는지 Primitive Type 과 Boxi..
Item 5. Resource를 직접 명시하지 말고, Dependency Injection을 사용하라 @Value 를 사용해서 프로퍼티를 인젝션하는 것이 좋다. → application.yml 같은 것을 프로퍼티로 사용 Property Injection Constructor Injectionn의 경우 Test, flexibility를 높일 수 있다. parameter 자체를 주입받자.. Config Class를 생각없이 사용하고 있지는 않았는지 Singleton을 이해하고 있는지 Dependency Injection (DI)를 잘 이해하고 있는지
Item 4. Instance화를 막으려면 private constructor를 사용하라 Instance 를 막는 Util Class private static final String PATTERN = ""; 누군가를 믿지 못할 상황이 있고, Human error를 방지하기 위해 private constructor를 권장한다. @Configuration 상식 쌓기 차원에서 @Configuration은 @Component를 포함하고 있고,
Item 3. private constructor 나 enum Type으로 Singleton임을 보증하라. INSTANCE가 초기화 되고 나면 고정이 된다. 생성자를 private로 해서 의도치 않은 생성자를 만들지 못하게 할 수 있다. 상황에 따라 synchronized 나, lazy하게 instance를 생성하는 방법도 있다. Enum Type으로 Singleton Pattern 을 사용할 수 있다.
Item 2. 많은 parameter가 있는 Constructor는 Builder를 고려하라 여러 개의 Constructor를 둘 경우와 Java beans Pattern(Setter) 를 사용하게 되면 너무 각 속성에 무엇이있는지 혼란을 초래할 수 있다. 여러 에러체크를 하는데에 어려움이 있을 수 있다. 필수 요소를 빼먹을 수도 있다. 같은 데이터 타입일 경우 문제가 생길 수 있다. 객체를 생성할 때, Setter를 많이 쓰면 코드가 지저분해질 수 있다. Lombok을 통하면 훨씬 더 Simple해 질 수 있다. @Bulder(builderMethodName = "hiddenBuilder") @Builder.Default private final int calories = 0; @ 상속받은 Class의 Builder가 정의한 build 메서드가 상위 메서드의 타입을 return하는 것이 아닌 ..
Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 Constructor 와 Static Factory method의 비교 생성자 대신에 Static Factory Method → 이름을 가지는 메서드.. 객체 하나를 가져와서 컨버팅하는 것이라면 from ofModelNameAndCompany 명확하게 재료를 알고 of 를 사용함 Api request with LptopForm 랩탑에 대한 정보를 받아서 추가하게 될텐데, 그리고 Dto를 리턴할 경우 LaptopForm → 밖에서 받는 request 라는걸 표현.. Laptop으로 convert해줄 필요가 있을 경우 from static method만들기.. 바로 새로운 인스턴스 Form을 받아서 새로운 인스턴스를 생성한다고 인지 할 수 있다. from~, of~ Response할 때에도 사용 가능함 장점..
Item 42. 익명 클래스보다는 람다를 사용하라 jdk1.1 부터 익명클래스(Anonymous Class)를 사용했는데, jdk1.8 부터는 람다식을 적용하면서 코드를 간결하게 작성할 수 있게 되었습니다. 람다식은 수학자 알론조(Alonzo Church)가 발표한 람다 계산법에서 사용된 식으로 이를 제자 존 매카시(John Macarthy)가 프로그래밍 언어에 도입했습니다. 사실 이것이 중요한 것은 아니고, Java8 버전부터 람다식(Lambda Expressions)을 지원하게 됨으로서 기존 익명함수(Anonymous function)을 대체하는 방법을 익혀야 한다. 람다식은 익명함수(Anonymous function)을 생성하기 위한 식으로 매개변수를 가진 코드 블록이다. 그리고 런타임 시에는 익명 구현 객체(추상메소드가 한 개인 객체)를 생성한다..

반응형