코드 품질에도 규모의 경제가 적용된다. 코드를 직접 작성하면서 프로그램이 실패하거나, 문제를 해결하고 싶어도 현상을 재현하기 쉽지 않은 경험이 있을 것이다. 예를 들면 무작위 정수 하나를 생성하고 싶다. 나는 이 책을 읽기 전까지 다음과 같은 코드로 작성했다. static Random rnd = new Random(); static int random(int n){ return Math.abs(rnd.nextInt()) % n; } 하지만 이 코드에는 결함이 3가지 있다. 첫 번째, n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다. 두 번째, n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다. (n값이 크면 이 현상은 더 두드러진다) 세 번째, random..
전통적인 for문보다는 for-each 문을 사용하라 🔎 for-each문이 전통적인 for문보다 무엇이 좋을까? 다음은 전통적인 for문으로 컬렉션을 순회하는 코드다. 순차적으로 발전하는 코드를 보여주면서 for-each문의 간결함을 볼 수 있을 것이다. 1. 전통적인 for문으로 컬렉션과 배열을 순회한다. // 컬렉션 순회 for (Iterator i = c.iterator() ; i.hasNext(); ){ Element e = i.next(); ... // e로 무언가를 한다. } // 배열 순회 for (int i=0 ; i 반복자와 인덱스 변수를 사용하지 않으니 코드가 깔끔해지고 오류가 날 일도 없다. 4 -> 하나의 관용구로 컬렉션과 배열을 모두 처리할 수 있어서 어떤 컨테이너를 다루는지는 ..
지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 🔍 지역변수의 범위를 줄이는 방법? - 4가지! '미리 선언하지 말고, 가장 처음 쓰일 때 선언 하기' - 사용하려면 멀었는데, 미리 선언부터 해두었다면? 코드가 어수선해져 가독성이 떨어진다. 변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있다. 다 쓴 뒤에도 여전히 살아있게 되기 쉽다. (지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때까지이므로) '거의 모든 지역변수는 선언과 동시에 초기화해야 한다.' 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다. - 예외상황으로 try-catch문이 있다. 변수를 초기화하는 표현식에서 검사 예외를 던질..