본문 바로가기
반응형

이펙티브7

[아이템7] 다 쓴 객체 참조를 해제하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 자바는 가비지 컬렉터를 통해서 다 쓴 객체를 회수해 갑니다. 하지만 이러한 장점으로 인하여 자칫 메모리 관리에 더 이상 신경쓰지 않아도 된다고 오해할 수 있습니다. 스택을 간단히 구현한 다음 코드를 보도록 하겠습니다. 스택 코드 // Can you spot the "memory leak"? public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAUL.. 2022. 9. 3.
[아이템6] 불필요한 객체 생성을 피하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 똑같은 기능의 객체를 매번 생성하는 것 보다는 처음 생성된 객체를 통해서 재사용하는 편이 좋을때가 많습니다. 특히 불변객체는 언제든지 재사용할 수 있습니다. 문자열 객체 생성 극단적인 예를 들어보겠습니다. String str = new String("extreme") 위 문장은 실행될때마다 String 인스턴스를 새롭게 만듭니다. 만약 위 문장을 반복문 또는 빈번히 호출하게 된다면 String 인스턴스는 계속 생겨나게 됩니다. 그래서 다음과 같이 사용해야 합니다. String str = "extreme"; 위 문장은 새로운 인스턴스를 매번 만드는 대신 하나의 String 인스턴스를 사용합니다. 처음 .. 2022. 9. 3.
[아이템5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 많은 클래스는 하나 이상의 자원에 의존하게 됩니다. 책에 있는 예제인 통해 맞춤법 검사기에 대해서 알아보도록 하겠습니다. 부적절한 구현 아래는 static 유틸 클래스를 통해서 구현하였습니다. public class SpellChecker { private static final Lexicon dictionary = new KoreanDictionary(); private SpellChecket() {} // 객체 생성 방지 public boolean isValid(final String word) { throw new UnsupportedOperationException(); } public Lis.. 2022. 9. 3.
[아이템4] 인스턴스화를 막으려거든 private 생성자를 사용하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 정적 메소드와 정적 필드 정적 메소드와 정적 필드만을 담은 클래스를 사용할때가 있습니다. java.lang.Math , java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓았습니다. java.util.Collections 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메소드를 모아놓았습니다. 자바 8부터는 정적 메소드를 인터페이스로 생성 가능합니다. final 클래스와 관련한 메소드들을 모아놓았습니다. 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아닙니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어줍니다. 즉, .. 2022. 8. 7.
[아이템3] private 생성자나 열거 타입으로 싱글턴임을 보증하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 내용을 알아보기 전, 싱글턴에 대해서 알고 넘어가도록 하겠습니다. 싱글턴 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 싱글턴을 활용한 예로는 무상태 객체(stateless) 또는 설계상 유일해야 하는 시스템 컴포넌트 등 싱글톤의 단점 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트는 테스트하기가 어려워질 수 있다고 합니다. 좋은 객체 지향을 설계하기 위한 원칙 중에서 의존성을 인터페이스로 설계하면 실제 구현 클래스의 내용이 변경되어도 이를 사용한 코드는 영향을 받지 않게 됩니다. 하지만 싱글톤을 사용하는 경우 대부분 인터페이스가 아닌 구현 클래스의 객체를 미리 생성해놓고 정적 팩토리.. 2022. 8. 7.
[아이템2] 생성자에 매개변수가 많다면 빌더를 고려하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 정적 팩토리 메소드와 생성자를 이용하다 보면 제약사항이 생겨지게 됩니다. 매개변수가 많아지면 적절히 대응을 하기가 어려워집니다. 생성자에 매개변수가 많아졌을 경우 어떠한 패턴들을 통해서 처리할 수 있는지 알아보도록 하겠습니다. 점층적 생성자 패턴 주문 아이템 도메인은 테스트용 정적 팩토리 메소드를 포함하여 아래와 같이 사용하고 있습니다. 여기에서 필드가 추가된다면 정적 팩토리 메소드는 점점 추가될 수 있습니다. public class OrderItem { private Long seq; private Long orderId; private Long menuId; private Long quantity.. 2022. 8. 7.
반응형