본문 바로가기
728x90

공부/이펙티브자바33

[이펙티브자바]item6.불필요한 객체 생성을 피하라 재사용이 많다면 캐싱를 고려해보자. 꼭 필요한 상황이 아니라면 박싱된 기본 타입보다는 기본 타입을 사용하고, 의도하지 않은 오토박싱이 일어나지 않게 한다. 2023. 1. 13.
[이펙티브자바]item5.자원을 직접 명시하지 말고 의존 객체 주입을 사용하라. 하나의 클래스에서 여러 리소스를 사용하려면 아래와 같은 코드는 KoreanDicationary 만 사용할 수 있게 코드가 박혀있으니, public class SpellChecker { private Lexicon dictionary; public SpellChecker(Lexicon dictionary) { this.dictionary = dictionary; } private SpellChecker(){} public boolean isValid(String word) { return true; } public List suggestions(String typo) { throw new UnsupportedOperationException(); } public static void main(String[.. 2023. 1. 13.
[이펙티브 자바]item4.인스턴스를 막으려거든 private 생성자를 사용하라. 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있다는데..util 클래스 같은걸 말하는걸까..그런걸 제외하고 만들어본 기억이 없네. 추상 클래스로 만들면 인스턴스화를 막을 수 없으니 private 생성자로 막아두자. public class TestClass { private TestClass() { throw new AssertionError(); } // ... } AssertionError -> http://cris.joongbu.ac.kr/course/java/api/java/lang/AssertionError.html AssertionError (Java 2 Platform SE 5.0) 지정된 객체로부터 파생한 상세 메세지를 지정해 AssertionError를 구축합니다. 상세 메.. 2023. 1. 13.
[이펙티브 자바]item3.private 생성자나 열거 타입으로 싱글턴임을 보장하라 싱글톤은 만드는 방식은 많다.DCL 방식의 싱글톤 또는 enum 싱글톤을 이용하자. 물론 싱글톤의 단점도 존재한다. 테스트보기가 힘들다. mock 객체를 사용하려면 해당 객체가 인터페이스를 구현하고 있어야 함. 자바 싱글톤과 스프링의 싱글톤은 다르다. 자바는 클래스로더에 의해서 만들어지고, 스프링은 스프링 컨테이너 (applicationContext)에 의해서 구현된다 역직렬화 할때 직렬화 == 역직렬화 비교를하면 false 일텐데, 이를 true 로 나오게끔 하고싶으면 override 는 아니지만,,그렇다고 override 가 아니라고 말하기도 뭐한 코드를 넣어야한다 아래코드는 @override 가 아님.하지만 역직렬화 할때 사용은 함. private Object readResolve() { retur.. 2023. 1. 11.
[이펙티브 자바]item2.생성자에 매개변수가 많다면 빌더를 고려하라 자바를 쓰면 롬복은 필수로 쓰는데, 롬복으로 @Builder 로 쓰면서 알고 있던 것을 다시한번 확인하는 경험. 순수 빌더 패턴 클래스 안 정적 내부 클래스 선언)ex Builder 내부 생성자와 build 메서드 호출시 return new **class 에 this 를 넘겨 return 함. 아무래도 생성자가 많다면, 아무래도 자바는 빌더패턴을 사용해서 반환하는게 더 낫지않나 생각함. Objects.requireNonNull() 를 잘 사용안하는데, 나중에 써봐야지. 오버라이드 목록을 보니, 익셉션 메세지를 넣을 수 있는 부분이 있네. 비슷한 Optional.of 도 참고해서 입맛에 맞게 사용하자~ https://emgc.tistory.com/124 단점1.@Builder 적용시 모든 파라미터를 받는 .. 2023. 1. 11.
[이펙티브 자바]item1.생성자 대신 정적 팩터리 메서드를 고려하라. 장점 이름을 가질 수 있다. 생성자로 호출하는게 아니라, 메서드 호출이라 좀 더 명확한 네이밍이 가능함. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 싱글톤 처럼 만들어서 반환하면 생성비용을 좀더 아낀다. ex)Integer.valueof 반환 타입의 하위 타입 객체를 반화할 수 있는 능력이 있다. 디자인패턴처럼 인터페이스를 상속받아 반환.생성자를 사용한다면 해당 클래스만 반환할 수 있지.. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 오잉 이거 팩토리패턴 아닌가.파라미터로 받은 값으로 분기처리 후 return 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. https://www.youtube.com/watch?v=8uryCPDcoqI&.. 2023. 1. 11.
728x90