목록책 내용 요약 (13)
윤개발
가비지 컬렉션 언어에서는 메모리 누수를 찾기가 아주 까다롭다. 때문에 해당 참조를 다 사용한 후 null 처리하면 된다. Stack에서 메모리를 직접 관리하는 예제 public class Stack { private Object[] elements; ... public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; // 문제점 } ... } 위 코드는 pop() 메소드에서 size를 감소시키지만 해당 값은 그대로 있어 메모리 누수가 발생하는 것을 볼 수 있다. 스택에서 pop을 할 경우 null 처리를 해준 코드 Object result = elements[--size]; elements[siz..
생성자에 매개변수가 많다면 빌더를 고려하라. 정적 팩터리 메서드나 생성자는 매개변수가 많을 때 적절히 대응하기 어렵다. 일반적으로 사용하는 다음의 2가지 경우를 보자. 기존 패턴 1.점층적 생성자 패턴 - 필수 생성자, 선택 매개변수 1개를 받는 생성자, 선택 매개변수 2개를 받는 생성자, ..., n개를 받는 생성자 단점: 매개변수가 많아지면 클라이언트가 코드를 작성하기 어렵고 읽기도 어렵다. 2.자바빈즈 패턴 - 매개변수가 없는 생성자로 객체를 만든 후 세터를 이용해서 결정하는 방식 단점: 객체가 완성되기 전까지 일관성이 무너진 상태에 놓이게 된다. 빌더 패턴 클라이언트는 필수 생성자를 호출해 빌더 객체를 얻고 빌더 객체의 세터메소드를 사용하여 원하는 선택 매개변수를 설정한다. 객체 선언 class ..
생성자 대신 정적 팩터리 메서드를 고려하라. 클래스의 인스턴스를 얻는 전통적인 방법은 public 생성자다. 하지만 클래스는 생성자와 별도로 정적 팩토리 메서드를 제공할 수 있다. 생성자보다 정적 팩토리 메소드를 제공하는 방식에는 장단점이 있다. 장점 1.이름을 가질 수 있다. 생성자에게 넘기는 매개변수와 생성자로는 객체의 특성을 제대로 설명하지 못한다. BigInteger(int,int,Random) // 생성자 BigInteger.probablePrime(int bitLength, Random rnd) //정적 팩토리 메소드 다음 두 코드 중에서 어느 쪽이 "소수인 BigInteger 인스턴스를 반환한다"는 의미를 더 잘 설명할까? 또한 매개변수의 순서를 다르게 하여 생성자를 추가하는 방식을 정적 팩..