이펙티브 자바 - 다 쓴 객체 참조를 해제하라

다 쓴 객체 참조를 해제하라 JDK 8버전 Stack 코드 문제점 public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; // 문제 발생! } private void ensureCapacity() { if (elements.length == size) elements = Arrays.copyOf(elements, 2 * size + 1); } } JDK 8버전에서는 현재 index를 변경해서 stack의 top을 관리하지만, pop()을 할 때 TOP의 값을 줄이기만 합니다. 이 부분에서 메모리 누수가 발생합니다. ...

December 20, 2023 · Lee WooJin

정적 팩토리 메소드의 장단점

들어가며 오늘 이펙티브 자바를 읽으면서 정적 팩토리의 장점에 대해서 읽는데 뭔가 체감이 되지 않았습니다. 그래서 책에서 말하는 장점 코드에 대해서 작성해보고 설명해보는 시간을 가지려고 합니다. 정적 팩토리 메소드의 장점 1. 이름을 가질 수 있다 일반 public 생성자는 많이들 익숙하시죠? 하지만 우리가 생성자를 만들 때 함수명처럼 이름이 존재하지 않았어요. 정적 팩토리 메소드는 이름을 가질 수 있어 무슨 일을 하고 어떤 걸 만드는지 파악할 수 있어요! public class Car { private String model; private int year; private Car(String model, int year) { this.model = model; this.year = year; } public static Car createSportsCar() { return new Car("Sports Car", 2023); } public static Car createFamilyCar() { return new Car("Family Car", 2023); } } 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다 DatabaseConnection 객체를 가져오고 싶을 때마다 새로 생성하는 게 아닌 기존에 존재하면 재사용하고 없다면 생성해서 반환하는 형식을 가질 수 있습니다. ...

July 7, 2023 · Lee WooJin