Reference/Effective-Java

    [Effective-Java] Chapter9 #62. 다른 타입이 적절하다면 문자열 사용을 피하라

    문자열은 잘못 사용하면 번거롭고, 덜 유연하고, 느리고, 오류 가능성도 크다. 더 적합한 데이터 타입이 있거나 새로 만들 수 있다면, 문자열을 쓰고 싶은 유혹을 뿌리쳐라. 1️⃣ 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 입력받을 데이터가 진짜 문자열일 때만 사용하는 것이 좋다. 받을 데이터가 수치형 → int, float, double, BigInteger 등 적당한 수치 타입으로 변환하라. 받을 데이터가 참/거짓 → boolean 혹은 Enum 기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그걸 사용하고, 없으면 새로 하나 만들어라. 2️⃣ 문자열은 열거 타입을 대신하기에 적합하지 않다. public static final int APPLE_FUJI = 0; public static ..

    [Effective-Java] Chapter9 #61. 박싱된 기본 타입보다는 기본 타입을 사용하라

    📌 Java의 데이터 타입 기본 타입 : int, double, boolean 등 참조 타입 : String, Integer, Double, List 등 기본 타입은 모두 대응되는 참조타입이 있으며, 이를 박싱된 기본 타입이라 한다. Auto Boxing/Unboxing 덕에 두 타입을 구분하지 않고 사용할 수는 있지만, 주의해서 선택해야 한다. 📌 기본 타입 vs 박싱된 기본 타입 final int number1 = 1; final int number2 = 1; System.out.println(number1 == number2); // true final Integer number3 = 1; final Integer number4 = 1; System.out.println(number3 == numb..

    [Effective-Java] Chapter9 #60. 정확한 답이 필요하다면 float와 double은 피하라

    📌 실수 표기법 💡 float와 double 타입은 특히 금융 관련 계산과는 맞지 않는다. 알고리즘 공부를 할 때 해당 내용에 대해 다룬 포스팅이 있다. float과 double 타입은 과학과 공학 계산용으로 설계되었다. 이진 부동(浮動)소수점 연산에 사용되지만, 데이터라는 한계로 인해 유한한 수만 다룰 수 있어 '근사치'를 계산한다. 정확한 결과가 필요할 때는 사용하지 마라. 📌 어설프게 작성된 코드들 1️⃣ 기본적인 실수 연산 System.out.println(1.03 - 0.42); // 0.6100000000000001 System.out.println(1.00 - 9 * 0.10); // 0.09999999999999998 0.1 혹은 10의 음의 거듭 제곱 수를 표현할 수 없다. 결괏값을 출력..

    [Effective-Java] Chapter9 #59. 라이브러리를 익히고 사용하라

    📌 As-is static Random rnd = new Random(); static int random(int n){ return Math.abs(rnd.nextInt()) % n; } 0부터 n 사이의 무작위 정수를 생성하는 흔한 코드지만 3가지 문제점을 가지고 있다. 1️⃣ n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다. 'Math.abs(rnd.nextInt())'는 int 범위 내에서 난수를 생성한다. 이후 '% n' 연산을 통해 0부터 n-1 까지의 범위에서 값을 생성한다. n이 2의 제곱수가 아니라면, n-1 이 'rnd.nextInt()' 결과를 균등하게 나누어주지 못한다. 따라서 random() 을 여러번 호출하면 n이 크지 않은 2의 제곱수일 경우, 동일..