본문 바로가기

분류 전체보기

(67)
[Effective-Java] Item 60.정확한 답이 필요하다면 float와 double은 피하라 float과 double은 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었다. 따라서 정확한 결과가 필요할 땐 사용해선 안되며, 특히 금융 관련 계산과는 맞지 않는다. 10의 음의 거듭제곱 수를 표현할 수 없어서다. float과 double이 사용하는 IEEE-754 부동소수점 관련 참고하면 좋은 레퍼런스가 두 곳 있어서 참고했다 :) [참고1] / [참고2] / [참고3] 1달러가 있다고 하고, 10, 20, 30, 40... 센트짜리 사탕이 있다면 살 수 있을때까지 순서대로 산다고 생각해보자. 0.1+0.2+0.3+0.4 = 1.0 이라서 아래 코드가 4개가지 구매 가능하고, 잔돈이 없다고 생각할 수 있다. public static void main(S..
[Effective-Java] Item 59.라이브러리를 익히고 사용하라 Random Random 섹터에서 이슈는 아래와 같이 정리했습니다. [아이템 59] Random 클래스의 nextInt()와 URL 예제 · Issue #15 · Reading-Effective-Java/community p351. 앞의 두가지 문제점에서 n이 크지않은 2의 제곱수와 2의 제곱수가 아닐때 평균적으로 더 자주 반환된다고 나와있는데 n을 Integer.MAX_VALUE로 설정하거나 /2, /3을 했을 때는 중간값에 거의 수렴 github.com 0부터 n까지 수 사이에서 무작위 정수 하나를 생성하려 한다고 해보자. 그러면 다음과 같이 만들어 볼 수 있을 것이다. static Random rnd = new Random(); static int random(int n) { return Math...
[Effective-Java] Item 58.전통적인 for 문보다는 for-each 문을 사용하라 //컬렉션 순회하기 for(Iterator i = numberList.iterator();i.hasNext();){ Integer number = i.next(); ... } //배열 순회하기 for(int i = 0; i < numberArrays.length; i++{ Integer number = numberArrays[i]; ... } 단순히 순회를 목적으로 한다면 필요한 것은 원소일 뿐인데 위와 같은 for문을 사용해야할까? 이 for문은 다음과 같은 단점을 가진다. 쓰이는 요소 종류가 늘어나면 헷갈려서 오류가 생길 가능성 증가한다. 컬렉션 예시 코드는 반복자 i가 세 번 쓰이고, 배열 예시 코드는 인덱스 i가 네 번 쓰이는데 이는 잘못된 변수 사용 가능성이 커진다. 변수를 잘못 사용할 경우, ..
[Effective-Java] Item 57.지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 사독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 범위를 줄이는 기법 1. 가장 처음 쓰일 때 선언하기 선언 시점부터 그 지점을 포함한 블록이 끝날때까지의 범위를 가지는 지역변수를 막 쓴다면 끔찍한 결과를 초래하니 처음 쓰일 때 선언하자. 변수가 쓰이는 범위보다 앞서 선언될 경우,코드가 어수선하고 가독성이 떨어지며 사용 시점엔 타입과 초기값을 잊을 수 있다. 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝나도 살아 있게 된다. 2. 거의 모든 지역변수는 선언과 동시에 초기화하기 초기화에 필요한 정보가 충분하지 않다면 충분할 때까지 선언을 미루자. try-catch문은 예외다. try-catch문은 변수를 초기화하는 표현식에서 검사 예외를 ..