전통적인 클래스 인스턴스를 반환하도록 하는 방법은 public 생성자하지만 아래와 같은 정적 팩터리 메서드 방식을 고려해야 한다.클래스의 인스턴스를 반환하는 단순한 static 메서드이름을 가질 수 있다위 예시의 valueOf함수와 같이 다양한 이름을 설정 가능호출될
생성자나 정적 팩터리 메서드나 둘 다 매개변수가 많아지면 쉽지 않아짐매개변수가 6개일 때 우리는 생성자 옵션을 최대 6개까지 생각해야 하기 때문이다.원치 않는 매개변수도 굳이 넣어줘야하는 상황이 생길 수 있음매개변수가 많아지면 클라이언트 코드를 작성하거나 읽기 어려움.
인스턴스를 오직 하나만 생성할 수 있는 클래스함수와 같은 stateless 객체나 시스템 컴포넌트 등생성자를 private로 설정하여 인스턴스 생성시 단 한번만 작동하도록 함.클라이언트 코드권한이 있는 클라이언트에서 AccesibleObject.setAccessible
필요에 의해 인스턴스가 생성되지 않도록 클래스를 지정하고 싶을 때가 있다.예컨데 그냥 함수들을 모아놓아서 지정하고 싶을때 같이.ex) java.lang.Math, java.util.Arrays정적 멤버만 있는 클래스는 인스턴스를 생성하여 사용하려고 만든게 아니니까 인스
클래스 내부에서 직접 자원을 명시하는 것은 좋지 않다유연하지 못하고 테스트도 어렵다내가 Repository를 테스트용으로 MemoryRepository를 사용할 것인지, 실제 배포용으로 JdbcRepository를 사용할 것인지 결정할 때마다 서비스 객체에 와서 일일이
Object에 지정되어 두 객체의 같은지 여부에 따라 참/거짓 값을 반환하는 함수모든 객체들이 상속받게 되는 함수이나 각 객체마다 같다고 판정할 기준이 다르기 다르기 때문에 재정의의 필요성이 있다.String 의 equals 재정의 예String 은 먼저 == 연산자로
equals를 재정의한 클래스 모두에서 hashCode도 재정의 해야한다.HashCode일반 규약을 어기게 되어 인스턴스를 HashMap이나 HashSet 같은 컬랙션의 원소로 사용할 때 문제를 일으키기 때문\*\*1. equals 비교에 사용되는 정보가 변경되지 않았
toString을 잘 구현한 클래스는 사용자에겐 즐겁고 시스템에겐 디버깅하기 쉽다!클래스이름과 해시코드를 반환하는 해당 기본 메서드는 모든 클래스에서 유용해보이지 않는다. 따라서 방법은 클래스에 적합하게 항상 재정의 하는 것!특히 컬랙션에서 유용하게 사용할 가능성이 크
Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스!메서드가 없음clone 메서드는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하고 반환한다.단 이상하게도 clone 메서드는 Cloneable 인터페이스가 아닌 Object에