Effective Java 6

[9장] Item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라

9장. 일반적인 프로그래밍 원칙 기본타입은 간단하고 빠르다. 기본타입, 박싱된 기본 타입을 혼용할 경우, 언박싱 과정에서 NullPointerException을 던질 수 있다. 자바의 데이터 타입은 기본타입(int, double, boolean), 박싱된 기본 타입(Integer, Double, Boolean)이 있다. 는 다음과 같다. 1. 식별성 기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 값+식별성을 갖는다. 즉, 박싱된 기본 타입은 참조 타입 변수이기 때문에 Integer i1 = new Integer(1); Integer i2 = new Integer(1); 두 변수 i1, i2가 같은 값 1을 가지고 있더라도 "i1 == i2" 는 false인 것이다. 값이 같아도 서로 다르다고 식별..

Effective Java 2022.07.29

[9장] Item 60. 정확한 답이 필요하다면 float와 double은 피하라

9장. 일반적인 프로그래밍 원칙 float, double 대신 BigDemical이나 int/ long을 사용하라 float과 double타입은 과학, 공학 계산용으로 설계되었다. 이진 부동소수점 연산에 쓰이고, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었다. 따라서 정확한 결과가 필요할 때는 사용하면 안 된다. System.out.println(1.03 - 0.42);//0.6100000000001 System.out.println(1.00 - 9*0.10);//0.09999999999999998 위와 같이 doule, float형은 정확한 수치 계산 결과를 내놓을 수 없다. 이를 해결하기 위해서는 BigDemical 또는 int, long을 사용해야 한다. BigDemical의 단..

Effective Java 2022.07.26

[9장] Item 59. 라이브러리를 익히고 사용하라

9장. 일반적인 프로그래밍 원칙 바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면, 누군가 이미 라이브러리 형태로 구현해놓았을 확률이 크다. 1. 표준 라이브러리를 활용하면 그 코드를 작성한 전문가의 지식과, 나보다 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있다. 무작위 정수를 생성하고 싶다고 했을 때, 다음과 같은 코드로 작성하면 3가지 문제점이 발생한다. static Random rnd = new Random(); static int random(){ return Math.abs(rnd.nextInt()) % n ; } 1) n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다. 2) n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다...

Effective Java 2022.07.26

[9장] Item 58. 전통적인 for문보다는 for-each문을 사용하라.

9장. 일반적인 프로그래밍 원칙 전통적인 for 문과 비교했을 때 for-each문은 명료하고, 유연하고, 버그를 예방해준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each문을 사용하자. for-each문의 정식 이름은 '향상된 for 문(enhanced for statement)'이다. 반복자와 인덱스 변수를 사용하지 않으므로 코드가 깔끔해지고 오류가 날 일이 없다. 하나의 관용구로 컬렉션과 배열을 모두 처리할 수 있어서 어떤 컨테이너를 다루는지는 신경 쓰지 않아도 된다. Iterable 인터페이스를 구현한 객체라면 무엇이든 순회할 수 있다. [향상된 for 문을 사용할 수 없는 상황] 1. 파괴적인 필터링 컬렉션을 순회하며 선택된 원소를 제거해야 한다면 반복자의 remove ..

Effective Java 2022.07.24

[9장] Item 57. 지역변수의 범위를 최소화하라

9장. 일반적인 프로그래밍 원칙 지역변수의 유효 범위를 최소로 줄이면, 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 💡 지역변수의 범위를 줄이는 방법 1. 가장 처음 쓰일 때 선언하기 나 역시 c언어로 프로그래밍을 처음 배우기도 했고, 가장 위에 지역변수를 선언하는 버릇이 있어왔다. 하지만, 사용하려면 멀었는데 미리 선언부터 해 둘 경우 코드가 어수선해져 가독성이 떨어진다. 또한 쓰임을 다 한 뒤에도 여전히 살아 있게 되기 쉽다. 2. 선언과 동시에 초기화하기 초기화에 필요한 정보가 충분하지 않다면, 충분해질 때까지 선언을 미뤄야 한다. (try-catch문은 예외이다. try문 바깥에서도 사용해야 한다면 try 앞에서 선언해야 한다.) 3. 반복문은 while문보다 for문을 사용하는 ..

Effective Java 2022.07.24

[2장] Item 1. 생성자 대신 정적 팩토리 메소드를 고려하라

2장. 객체의 생성과 파괴 정적 팩터리 메서드(static factory method) 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 (예시) boolean의 Boxed class인 Boolean 클래스의 정적 팩토리 메소드이다. public static Boolean valueOf(boolean b){ return b? Boolean.TRUE : Boolean.FALSE; } 클래스는 클라이언트에게 public 생성자 대신 정적 팩토리 메소드를 제공할 수 있다. 장점 1. 이름을 가질 수 있다. public 생성자의 경우, 이름을 따로 가질 수 없다. 하지만 정적 팩토리 메소드는 반환될 객체의 특성을 쉽게 묘사할 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변 클래스:..

Effective Java 2022.07.23