이팩티브 자바 3판 책을 읽고 정리하는 글입니다.!정적 팩터리 메서드란?static factory method : 객체 생성의 역할을 하는 클래스 메서드라는 의미팩터리 메서드의 디자인패턴이랑 별개의 이야기이다.!!public 생성자를 사용해서 객체를 생성하는 전통적인
이팩티브 자바 3판을 읽고 정리하는 글입니다static 팩터리와 생성자 둘다 매개변수가 많이 필요한 경우에 불편해지는 문제가 있다.해당 클래스는 몇몇 반드시 필요한 필드와 선택적인 필드를 가질 수 있는데, 그런 경우에 필수적인 매개변수를 가진 생성자에 부가적인 필드를
싱글톤 : 인스턴스를 오직 하나만 생성할 수 있는 클래스클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. -> 싱글톤이 인터페이스를 구현한게 아니라면 Mock 구현으로 대체할 수 없기때문에.싱글톤을 만드는 방식은 보통 둘 중 하나,
static 메서드와 static 필드만을 담은 클래스를 만든 경우에 추상 클래스로 만드는 것으로도 인스턴스화를 막을 수 없다. \--> 하위 클래스를 만들어 인스턴스화하면 그만. 그래서 상속해서 쓰라는 뜻으로 오해할 수 있다는 문제가 있다.그리고 아무런 생성자를 만들
대부분의 클래스가 하나 이상의 자원에 의존한다. SpellChecker를 다음과 같이 구현하는 모습이 드물지 않게 보인다.static 유틸리티 클래스(아이템4)싱글톤으로 구현(아이템3)두 방식 모두 사전을 단 하나만 사용할 때 훌륭해보이지 한다. 실제로 각 언어의 맞춤
똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다.재사용하면 빠르고 세련된다?하면 안되는 코드String s = new String("bikini");이 코드는 실행될 때마다 String 인스턴스를 새로 만든다. 그래서 반복문을 하면
자바에서는 가비지 컬렉터가 다 쓴 객체를 알아서 회수해가니 메모리관리에서 더이상 신경 쓰지 않아도 된다고 오해할 수 있는데 절대 사실이 아니다.해당 코드는 왠만한 테스트에도 거뜬히 통과할 것이다. 하지만 스택에 계속 넣다가 빼낼때 스택이 차지하는 메모리는 줄어들지 않는
자바 라이브러리에는 close메서드를 호출해 직접 닫아줘야 하는 자원이 많다. InputStream, OutputStream,java.sql.Connection 등이 좋은 예다.자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능문제로 이어지기도 한다.이러한 자
자바는 두 가지 객체 소멸자를 제공한다. 그중 finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다.cleaner 는 finalizer보다는 덜 위험하지만, 여전히 예측할 수 없고, 느리고 ,일반적으로 불필요하다.두 가지 경우에 사용한