Language

Language/Java

[effective java] 아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라.

핵심 정리 가능하면 기본 타입을 사용하고, 사용해야 할 경우 박싱된 기본 타입을 사용하라. 기본 타입과 박싱된 기본 타입의 차이를 고려해서 사용해야 한다. 기본 타입 vs 참조 타입(박싱된 기본 타입) 기본 타입 예 boolean, byte, short, int, long, float, double, char 참조 타입 Integer, Double, Boolean, String, List 등 기본 타입과 참조 타입 차이점 식별성(Identity) 기본 타입: 값을 비교할 때 == 연산자를 사용한다. 박싱 타입: == 연산자는 두 객체의 참조값(메모리 주소)을 비교한다. null 가능성 기본 타입: null 값을 가질 수 없다. 박싱 타입: null 값을 가질 수 있다. 성능과 메모리 효율 기본 타입은 메..

Language/Java

[effective java] 아이템 60. 정확한 답이 필요하다면 float와 double은 피하라.

핵심 정리 정밀한 계산에는 float나 double을 사용하면 안 된다. 느린 속도와 불편함이 괜찮다면 BigDecimal을 사용하라. 성능이 중요하고 소수점을 직접 추적할 수 있고 숫자가 너무 크지 않다면 int나 long을 사용하라. 숫자를 아홉 자리 십진수로 표현할 수 있다면 int를 사용하라. 숫자를 열여덟 자리 십진수로 표현할 수 있다면 long을 사용하라. 열여덟 자리를 넘어가면 BigDecimal을 사용해야 한다. float과 double 타입 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 빠르게 정밀한 근사치로 계산하도록 설계되었다. 따라서 정확한 결과가 필요할 때는 부적합하다. 특히 금융 관련 계산에는 사용하면 안 된다. 10의 음의 거득제곱 수를 표현할 수 없으므로 .. 금융 관련 ..

Language/Java

[effective java] 아이템 59. 라이브러리를 익히고 사용하라.

핵심 정리 이미 잘 만들어 놓은 라이브러리를 잘 활용하자. 표준 라이브러리 사용 예제 : Random // 직접 구현 static Random rnd = new Random(); static int random(int n) { return Math.abs(rnd.nextInt()) % n; } public static void main(String[] args){ int n = 2 * (Integer.MAX_VALUE / 3); int low = 0; for (int i = 0; i < 1000000; i++) if (random(n) < n/2) low++; System.out.println(low); } 위 코드는 세 가지 문제점을 지니고 있다. n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아..

Language/Java

[effective java] 아이템 58. 전통적인 for 문보다는 for-each 문을 사용하라.

핵심 정리 가능한 모든 곳에서 for문이 아닌 for-each문을 사용하자. for문 vs for-each문 // 컬렉션 순회하기 - 더 나은 방법이 있다. for (Iterator i = c.iterator(); i.hasNext(); ){ Element e = i.next(); ... //e로 무언가를 한다. } // 배열 순회하기 - 더 나은 방법이 있다. for (int i = 0; i < a.length; i++) { ..// a[i]로 무언가를 한다. 위 방법은 while 문보다는 낫지만(item 57) 그렇다고 가장 좋은 방법은 아니다. 이유는 다음과 같다. 반복자와 인덱스 변수는 코드만 지저분하게 할 뿐 필요한 것은 원소들 뿐이다. 반복자와 인덱스 변수를 잘못 사용할 가능성이 높아진다. 컬..

Language/Java

[effective java] 아이템 57. 지역변수의 범위를 최소화하라.

지역변수의 범위를 최소화하라. : 코드 가독성과 유지보수성이 높아지고 오류 가능성이 낮아진다. 클래스의 멤버와 접근 권한을 최소화하라(item 15)와 비슷한 의도이다. 이번 포스트에서는 지역변수의 범위를 최소화하는 방법에 대해 다룬다. 가장 처음 사용되는 시점에서 선언하자. 코드의 어수선함을 줄이고 가독성을 높일 수 있다. 변수가 미리 선언되어 있으면 그 타입이나 초기값을 찾기 어려울 수 있다. 선언과 동시에 초기화하자. 필요한 정보가 충분하지 않다면 선언을 늦추는 것이 좋다. try-catch 문은 이 규칙에서 예외다. 변수를 초기화하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화해야 한다. BufferedReader reader; try { reader = new Buff..

Language/Java

[effective java] 아이템 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라.

자바독(Javadoc) 소스코드 파일에서 자바독 주석이라는 특수한 형태로 기술된 설명을 API 문서로 변환해준다. Java 언어로 작성된 소스 코드에 대한 문서를 HTML 형식으로 생성하는 도구이다. 클래스, 인터페이스, 메소드, 필드 등에 대한 설명을 제공한다. 공개된 모든 클래스, 인터페이스, 메소드, 필드 선언에 문서화 주석을 달아야 한다. 직렬화할 수 있는 클래스라면 직렬화 형태(item 87)에 관해서도 작성해야 한다. 자바의 기본 생성자에는 문서화 주석을 작성할 수 없다. 따라서 공개 클래스는 절대 기본 생성자를 사용하면 안 된다. 유지 보수를 위해 비공개 클래스, 인터페이스, 생성자, 메소드, 필드에도 문서화 주석을 달아야 한다. 메소드용 문서화 주석에는 해당 메소드와 클라이언트 사이의 규약..

Language/Java

[effective java] 아이템 55. 옵셔널 반환은 신중히 하라.

핵심 정리 값을 반환하지 못할 가능성이 있는 메소드라면 옵셔널을 반환하는 것을 고려해보자. 그러나 옵셔널 반환에는 성능 저하가 따를 수 있으니, 성능에 민감한 경우 null을 반환하거나 예외를 던지는 것이 나을 수 있다. 또한, 옵셔널을 반환값 이외의 용도로 쓰는 경우는 매우 드물다. 메소드가 특정 조건에서 값을 반환할 수 없을 때 : 자바 8 이전 방법 1 : 예외 처리 👉 좋지 않은 방법 예외는 정말 예외적인 상황에서만 사용해야 한다.(item 69) 메소드의 정상적인 동작 흐름을 중단시킨다. 스택 추적을 생성하므로 성능 측면에서 비용이 발생한다. 방법 2 : 반환 타입이 객체 참조라면, null 반환 👉 좋지 않은 방법 null 체크를 해야 하는 코드를 추가적으로 작성해야 한다. 괴로운 NullPo..

Language/Java

[effective java] 아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라.

핵심 정리 null이 아닌 빈 배열이나 컬렉션을 반환하라. 성능적으로도 좋고 오류 처리 코드도 필요 없다. null을 반환하는 메소드 // 잘못된 예 private final List cheesesInStock = ...; /** * @return 매장 안의 모든 치즈 목록을 반환한다. * 단, 재고가 하나도 없다면 null을 반환한다. */ public List getCheeses() { return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } 위 코드는 NullPointerException을 발생시키는 경우가 많으며, 이에 따라 디버깅이 어렵게 된다. // 방어 코드 List cheeses = shop.getCheeses();..

JOYERIM
'Language' 카테고리의 글 목록 (4 Page)