개요 일반적으로 클래스의 인스턴스를 얻는 방법으로는 public 생성자다. 일반적인 클래스에선 public 생성자만응로도 충분히 생성이 가능하지만, 생성자 외에 정적 팩터리 메서드를 제공하면 사용자 입장에서 의도한 대로 인스턴스를 만들기 쉬워지는 경우가 종종 있다.
점층적 생성자 패턴 정적 팩터리와 생성자에는 선택적 매개변수의 수가 많을 때 대응하기가 어렵다. 이럴 때 점증적 생성자 패턴을 사용할 수 있다. 하지만 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기가 매우 어렵다. 자바 빈즈 패턴 자바빈즈 패턴은 매개
싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태 객체, 설계상 유일한 시스템 컴포넌트를 말한다. 하지만 싱글턴 클래스는 타입을 인터페이스로 정의하고 그것을 구현체로 정의한 것이 아니라면 테스트하기 어려워질
정적 메서드와 정직 필드만을 담은 클래스를 만들고 싶을 때가 있다. 예를 들어 java.lang.Math, java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아 놓을 수 있다. 혹은 java.util.Collections처럼 특정 인터페이스를
클래스가 하나 이상의 자원에 의존하고, 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다.이 자원들을 클래스가 직접 만들게 해서도 안 된다. 대신 필요한 자원을 생성자에 넘겨주자. 의존 객체 주입이라 하는 이 기법은 클래스의 유
문자열 a,b,c는 결국 동일한 "test"라는 문자열을 가지군다. 하지만 실행될때 마다 String 인스턴스를 새로 만들어 버린다. 이렇게 되면 메모리를 할당하기 때문에 낭비가 발생되어 버린다.그렇기 때문에 문자열 리터럴을 사용하여 이러한 메모리 낭비를 줄여야 한다.
C,C++ 와는 다르게 자바에서는 GC(가비지 컬렉터)을 통해 메모리를 회수해 가지만. 그렇다고 메모리 관리를 하지 않아도 된다고 오해해서는 절대 안된다간단한 스택을 구현한 코드이다. 특별한 문제는 없어 보이지만, 이스택을 사용하는 프로그램을 오래 실행하다 보면 가비지
자바에서 두 가지 객체 소멸자인 finalizer과 cleaner를 제공한다. 하지만 이를 사용하는 것은 지양해야한다. 자바 9 에서 finalizer은 deprecated 되었고, clenaner가 대안으로 나왔으나 여전히 예측할 수 없고, 느리며, 불필요 하다.Fi
얼마전에 작성했던 try-with-resources의 대한 내용이 책에서도 나오는것을 보면 많이 사용되는 개념인것 같다. 앞서 try-with-resources 예외 처리여기서 설명했지만 각설하고 다시 정리해보도록 하자자바의 InputStream, OutputStre
equals를 재정의한 클래스는 hashCode도 재정의 해야한다. 그렇지 않는다면 hashCode 일반 규약을 어기게 되어 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으키기 때문이다.equals비교에 사용되는 정보가 변경되지 않다면, 객
불변 클래스란? >불변 클래스란 간단히 말해 그 인스턴스의 내부 값을 수정할 수 없는 클래스다. 자바 플랫폼 라이브러리에도 String, BigInteger, BigDecimal가 여기 속한다.
일정 개수의 상수 값을 정의한 다음 그외의 값은 허용하지 않은 타입그렇다면 이런 열거 타입을 왜 사용할까? 열거 타입 이전에 사용 했던 정수 열거 패턴을 살펴보며 이유를 알아보자!타입 안전을 보장할 방법이 없으며, 표현력 또한 좋지 않다.평범한 상수를 나열이기 때문에