이펙티브자바 Effective Java - 모든 객체의 공통 메서드(3) : toString을 항상 재정의히라 Object의 기본 toString 메서드는 잘 알다시피 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다. 클래스_이름@16진수로_표시한_해시코드로나 반환될 것이다. toString 일반 규약에 따르면 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다. toString() 메서드는 보통 println, printf, 문자열 연결 연산자(+), assert 구문... 이펙티브자바이펙티브자바 86. Serializable을 구현할지는 신중히 결정하라 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 따라서 객체를 저장한다는 것은 객체의 모든 인스턴스 변수의 값을 저장한다는 의미이다. 객체를 저장, 전송하기 위한 방법으로 직렬화가 등장한다. 프로그래머가 어렵지 않게 분산 객체를 ... 자바이펙티브자바이펙티브자바 아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 1. 이름을 가질 수 있다. 한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 것 같으면, 생성자를 정적 팩터리 메서드로 바꾸고 각각의 차이를 잘 드러내는 이름을 지어주자. 2. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인... 이펙티브자바이펙티브자바 [item9] try-finally보다는 try-with-resources를 사용하라 try-finally 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. 위의 코드가 있다고하자, 기기의 물리적인 문제로 인해 try 블록 안에서 예외를 던지고, finally 블록 안에서도 close 메서드가 실패한다면 finally 블록에서 발생한 예외가 try블록 안에서의 예외를 먹어서 try블록 안의 예외에 대한 정보를 얻을 수 없는 상태가 된다. try... 이펙티브자바이펙티브자바 [item6] 불필요한 객체 생성을 피하라 똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나를 재사용하는게 나은 경우도 많다. String 객체 생성 new 키워드로 String 객체를 생성할때는 매번 새로운 객체를 생성한다. 리터럴로 String 객체를 생성할 때는 constant pool이 중복된 값이 있는지 확인하고 중복 값이 있을 경우 새로 잡힌 heap 영역을 해제하고 기존에 있던 인스턴스의 주소를 리턴함으로서 새로 생성... 이펙티브자바이펙티브자바 Effective Java - 객체 생성과 파괴(2) : 생성자에 매개변수가 많다면 빌더를 고려해라 기존의 생성자나 팩토리 메소드는 매개변수의 양이 많아지면 이를 컨트롤하기 어려웠다. 이런 경우 우리는 빌더 패턴을 사용할 수 있다. 이 클래스는 기본적으로 불변이며, 모든 매개변수의 기본값들을 한곳에 모아뒀다. 빌더의 setter 메서드들은 빌더 자신을 반환하기 때문에 연쇄적으로 호출할 수 있다. 이런 방식을 메서드 호출이 흐르듯 연결된다는 뜻으로 플루언트 API 혹은 메서드 연쇄라 한다. ... 이펙티브자바이펙티브자바 Effective Java - 객체 생성과 파괴(3) : private 생성자나 열거 타입으로 싱글턴임을 보장하라 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 대표적으로 함수와 같은 무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. 하지만, 클래스를 싱글턴으로 만들 시 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 타입을 인터페이스로 정의하고 그 인터페이스를 구현해 만든 싱글턴이 아닌 이상 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. ... 이펙티브자바이펙티브자바 Effective Java - 객체 생성과 파괴(4) : 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때 (java.lang.Math or java.util.Arrays or java.util.Collections 같은 기본 타입 값이나 배열 관련 메서들을 모아놓거나 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓는 것들 / final 클래스와 관련한 메서드를 모아놓을 때 등) 정적 멤버만 담은 유틸리티 클래스는 인스턴... 이펙티브자바이펙티브자바
Effective Java - 모든 객체의 공통 메서드(3) : toString을 항상 재정의히라 Object의 기본 toString 메서드는 잘 알다시피 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다. 클래스_이름@16진수로_표시한_해시코드로나 반환될 것이다. toString 일반 규약에 따르면 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다. toString() 메서드는 보통 println, printf, 문자열 연결 연산자(+), assert 구문... 이펙티브자바이펙티브자바 86. Serializable을 구현할지는 신중히 결정하라 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 따라서 객체를 저장한다는 것은 객체의 모든 인스턴스 변수의 값을 저장한다는 의미이다. 객체를 저장, 전송하기 위한 방법으로 직렬화가 등장한다. 프로그래머가 어렵지 않게 분산 객체를 ... 자바이펙티브자바이펙티브자바 아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 1. 이름을 가질 수 있다. 한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 것 같으면, 생성자를 정적 팩터리 메서드로 바꾸고 각각의 차이를 잘 드러내는 이름을 지어주자. 2. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인... 이펙티브자바이펙티브자바 [item9] try-finally보다는 try-with-resources를 사용하라 try-finally 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. 위의 코드가 있다고하자, 기기의 물리적인 문제로 인해 try 블록 안에서 예외를 던지고, finally 블록 안에서도 close 메서드가 실패한다면 finally 블록에서 발생한 예외가 try블록 안에서의 예외를 먹어서 try블록 안의 예외에 대한 정보를 얻을 수 없는 상태가 된다. try... 이펙티브자바이펙티브자바 [item6] 불필요한 객체 생성을 피하라 똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나를 재사용하는게 나은 경우도 많다. String 객체 생성 new 키워드로 String 객체를 생성할때는 매번 새로운 객체를 생성한다. 리터럴로 String 객체를 생성할 때는 constant pool이 중복된 값이 있는지 확인하고 중복 값이 있을 경우 새로 잡힌 heap 영역을 해제하고 기존에 있던 인스턴스의 주소를 리턴함으로서 새로 생성... 이펙티브자바이펙티브자바 Effective Java - 객체 생성과 파괴(2) : 생성자에 매개변수가 많다면 빌더를 고려해라 기존의 생성자나 팩토리 메소드는 매개변수의 양이 많아지면 이를 컨트롤하기 어려웠다. 이런 경우 우리는 빌더 패턴을 사용할 수 있다. 이 클래스는 기본적으로 불변이며, 모든 매개변수의 기본값들을 한곳에 모아뒀다. 빌더의 setter 메서드들은 빌더 자신을 반환하기 때문에 연쇄적으로 호출할 수 있다. 이런 방식을 메서드 호출이 흐르듯 연결된다는 뜻으로 플루언트 API 혹은 메서드 연쇄라 한다. ... 이펙티브자바이펙티브자바 Effective Java - 객체 생성과 파괴(3) : private 생성자나 열거 타입으로 싱글턴임을 보장하라 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 대표적으로 함수와 같은 무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. 하지만, 클래스를 싱글턴으로 만들 시 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 타입을 인터페이스로 정의하고 그 인터페이스를 구현해 만든 싱글턴이 아닌 이상 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. ... 이펙티브자바이펙티브자바 Effective Java - 객체 생성과 파괴(4) : 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때 (java.lang.Math or java.util.Arrays or java.util.Collections 같은 기본 타입 값이나 배열 관련 메서들을 모아놓거나 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓는 것들 / final 클래스와 관련한 메서드를 모아놓을 때 등) 정적 멤버만 담은 유틸리티 클래스는 인스턴... 이펙티브자바이펙티브자바