Reference/Effective-Java

    [Effective-Java] Chapter9 #58. 전통적인 for문보다는 for-each 문을 사용하라

    📌 for-each : 향상된 for문(enhanced for statement) // 반복자를 이용한 반복문 for (Iterator i = c.iterator(); i.hasNext();) { Element e = i.next(); ... } // 인덱스 변수를 사용한 반복문 for (int i = 0; i < a.length; i++) { ... } // for-each문을 사용한 반복문 for (Element e : elements) { ... } 불필요하게 코드를 복잡하게 만드는 요소를 모두 제거하고, 컬렉션의 원소에 집중할 수 있게 한다. 하나의 관용구로 컬렉션과 배열을 모두 처리할 수 있어, 어떤 컨테이너를 다루는지 신경쓸 필요 없다. 반복 대상에 상관없이 for-each문의 속도는 같다. ..

    [Effective-Java] Chapter9 #57. 지역변수의 범위를 최소화하라

    "클래스와 멤버 접근 권한을 최소화하라(Item 15)"와 비슷한 취지다. 지역 변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지면서 오류 가능성은 낮아진다. 📌 지역 변수 선언 시점 가장 처음 쓰일 때 선언하라. 미리 선언해두면 어수선해지다. 실제 사용 시점에 초깃값이 기억나지 않을 수 있다. 의도하지 않은 범위 앞 혹은 뒤에서 변수를 사용하게 될 경우 끔찍한 결과로 이어진다. 거의 모든 지역 변수는 선언과 동시에 초기화하라. 초기화에 필요한 정보가 충분하지 않다면 선언을 미뤄라. try-catch문은 해당 규칙에서 예외지만, 변수 초기화 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화하라. (그래야 예외가 메서드에 전파되는 걸 막을 수 있다.) 설령 try 블..

    [Effective-Java] Chapter8 #56. 공개된 API 요소에는 항상 문서화 주석을 작성하라

    💡 문서화가 잘 됐는지 판단하는 방법은 Javadoc Utility가 생성한 웹페이지를 읽어보는 길 뿐이다. 📕 목차 1. Javadoc 2. 유의 사항 • 공개된 모든 클래스, 인터페이스, 메서드, 필드 선언에 문서화 주석을 달아라 • 메서드용 문서화 주석은 해당 메서드와 클라이언트 사이 규약을 명료화하라 • 제네릭 타입이나 제네릭 메서드는 모든 타입 매개변수에 주석을 달아라 • 열거 타입은 상수들에도 주석을 달아라 • 애너테이션 타입의 멤버들에도 모두 주석을 달아라 • 패키지와 모듈 시스템 주석 • Thread 안전 수준 3. 메서드 계약(contract) : @param, @return, @throw 4. 메타 문자 무시 : @code, @literal 5. 자기사용 패턴(self-use patte..

    [Effective-Java] Chapter8 #55. 옵셔널 반환은 신중히 하라

    📌 Java 8 이전 Exception 진짜 예외적인 경우에서만 사용해야 한다. (Item 69) 예외 생성 시에 스택 추적 전체를 캡처하므로 비용이 비싸다. null 반환 null이 반환될 일이 절대 없다고 확신하지 않는 한, 클라이언트가 null-guard를 해주어야 한다. 만약, 이를 놓치면 실제 원인과는 전혀 상관없는 코드에서 NullPointerException이 발생할 수 있다. 📌 Optional 💡 Optional은 검사 예외와 취지가 비슷하다. (Item 71) Optional은 원소를 최대 1개 가질 수 있는 '불변' 컬렉션이다. (Collection를 구현하지는 않았다.) T를 반환하거나, 반환할 값이 없을 때 Optional를 반환하도록 선언하면 된다. 절대 null을 반환하지마라...