[Effective-Java] Chapter9 #59. 라이브러리를 익히고 사용하라
·
Reference/Effective-Java
📌 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의 제곱수일 경우, 동일..
[Clean Code] 7. 오류 처리
·
Reference/CleanCode
📕 목차 1. 오류 코드보다 예외를 사용하라 2. Try-Catch-Finally 문부터 작성하라 3. 미확인(unchecked) 예외를 사용하라 4. 예외에 의미를 제공하라 5. 호출자를 고려해 예외 클래스를 정의하라 6. 정상 흐름을 정의하라 7. null을 반환하지 마라 8. null을 전달하지 마라 1. 오류 코드보다 예외를 사용하라 📌 As-is. 오류 코드 public class DeviceController { ... public void sendShutDown() { DeviceHandle handle = getHandle(DEV1); // Check the state of the device if (handle != DeviceHandle.INVALID) { // Save the devi..
[Effective-Java] Chapter9 #58. 전통적인 for문보다는 for-each 문을 사용하라
·
Reference/Effective-Java
📌 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. 지역변수의 범위를 최소화하라
·
Reference/Effective-Java
"클래스와 멤버 접근 권한을 최소화하라(Item 15)"와 비슷한 취지다. 지역 변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지면서 오류 가능성은 낮아진다. 📌 지역 변수 선언 시점 가장 처음 쓰일 때 선언하라. 미리 선언해두면 어수선해지다. 실제 사용 시점에 초깃값이 기억나지 않을 수 있다. 의도하지 않은 범위 앞 혹은 뒤에서 변수를 사용하게 될 경우 끔찍한 결과로 이어진다. 거의 모든 지역 변수는 선언과 동시에 초기화하라. 초기화에 필요한 정보가 충분하지 않다면 선언을 미뤄라. try-catch문은 해당 규칙에서 예외지만, 변수 초기화 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화하라. (그래야 예외가 메서드에 전파되는 걸 막을 수 있다.) 설령 try 블..