
자바에서 객체를 생성하는 일반적인 방법은 new 키워드를 사용하는 생성자다. 자바에서는 생성자 외에도 정적(static) 팩터리 메서드를 활용하여 객체를 생성할 수 있다. 여기서 말하는 정적 팩터리 메서드는 GoF의 Factory Method 패턴과는 다르며, 단순히

객체를 생성할 때 선택적 매개변수가 많으면 일반적인 생성자나 정적 팩터리 메서드만으로는 적절히 대응하기 어렵다. 이를 해결하기 위한 대안으로 3가지 방법이 존재한다.기본 생성자부터 시작해서 매개변수를 점진적으로 추가하는 방식이다.매개변수 개수가 많아질수록 생성자가 너무

싱글턴(Singleton)은 인스턴스를 단 하나만 생성할 수 있는 클래스를 의미한다.시스템 전체에서 해당 클래스의 객체가 하나만 존재하도록 보장하는 패턴이다.무상태(stateless)는 내부에 상태(멤버 변수)를 가지지 않는 객체를 의미한다.객체의 상태가 공유되지 않아

item4 에서는 정적 메서드와 정적 필드만을 담은 클래스를 왜 이런 클래스가 객체 지향적이지 않다는 것인지 어떻게 안전하게 만드는지를 말한다.객체 지향(OOP)은 보통 상태(필드)와 행동(메서드)을 갖는 객체들이 협력하여 프로그램을 설계하는 것이다.그러나 정적 멤버만

자원이 여러 개 필요할 때 정적 유틸리티 클래스나 싱글턴을 사용하는 것은 좋지 않다.필요한 자원이 여러 개일 수 있다 하나의 자원으로 모든 경우를 처리할 수 있다고 가정하는 것은 바람직하지 않다. 맞춤법 검사기에서 필요한 사전은 언어별 사전일 수도 있고, 특수 어휘

1. 객체를 반복 생성하지 말고 재사용하자 같은 기능을 하는 객체를 매번 생성하는 것보다 이미 생성된 객체를 재사용하는 것이 성능 면에서 유리하다. 불변(Immutable) 객체는 언제든 재사용할 수 있으며, 대표적인 예 String 클래스가 있다. String을

자바는 가비지 컬렉션(Garbage Collection, GC)을 통해 자동으로 메모리를 관리한다. 그래서 메모리 관리에 신경 쓰지 않아도 된다고 착각하기 쉽다. 하지만 잘못된 객체 참조를 계속 유지하면 메모리 누수(메모리 낭비)가 발생한다.가비지 컬렉터 : 프로그래머

자바는 C++와 달리 파괴자(destructor)가 없다. 대신 가비지 컬렉터(GC)가 자동으로 메모리를 회수한다. 그러나 자바도 예전에 "finalizer"라는 메커니즘, 그리고 자바 9부터 "cleaner"라는 메커니즘을 제공한다. 자바에서는 finalizer나 c

자바 라이브러리와 프레임워크에는, 직접 자원을 닫아야 하는 클래스들이 많이있다.InputStream, OutputStream, Reader, Writer (IO 관련)java.sql.Connection, Statement, ResultSet (JDBC 관련)JPA(Hi

꼭 필요한 경우가 아니라면 equals를 재정의하는 것이 좋지 않다.equals를 재정의하지 않는 것이 좋은 상황은 대표적으로 아래 4가지 상황이 있다.1\. 각 인스턴스가 본질적으로 고유하다.값이 아닌 동작(행위) 중심 객체라면 동치성이 의미가 없다.예 : Threa

equals를 재정의하면 같은 논리적 값을 가진 객체들은 서로 동일한 hashCode를 반환해야 한다.hashCode를 재정의하지 않으면 않으면 HashMap, HashSet, HashTable 같은 해시 기반 컬렉션에서 동작이 제대로 이루어지지 않는다. 즉 동일한 객

기본 Object.toString()은 클래스이름@16진수해시코드를 반환한다.의미 없는 정보만 제공하기 때문에 가독성이 떨어지게되어 사용자에게 유용한 정보를 포함하는 toString()을 직접 재정의해야 한다.예를 들어, PhoneNumber 클래스의 기본 toStri

자바에서 객체 복사를 지원하기 위해 Cloneable 인터페이스와 clone() 메서드가 존재한다.Cloneable은 메서드가 하나도 없는 인터페이스다. \- 메서드가 하나도 없이 단순하게 복사할 수 있는 객체라고 표시만 한다.이렇게 표시만 하는 인터페이스를 마커 인터