본 포스팅은 '이젠아카데미컴퓨터학원 종로캠퍼스'에서 진행한 윤대명 선생님의 강의를 듣고 공부한 내용을 정리한 것입니다.
*참고 자료: 신용권, 『이것이 자바다』, 한빛미디어(주), 2015.
목차
1. 산술 연산자
*boolean 타입을 제외한 모든 기본 타입에서 사용 가능합니다.
*결과값을 산출할 때 Overflow(값이 넘치는 경우, 값이 범위를 벗어나는 경우)를 주의해야 됩니다.
*정확한 계산은 정수를 사용하는 게 좋습니다.
*NaN, Infinity 연산은 주의해야 합니다.
연산식 | 설명 |
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 나눗셈 |
% | 나머지 예를 들면, [10 % 3 = 1] |
1-1. [예제] 산술 연산자 1
↘모든 연산 결과, 정수와 정수의 연산 결과는 정수입니다. int 타입이 됩니다. int 타입의 값을 byte에는 넣을 수 없습니다. 연산된 결과(+, -, *, /, %)는 전부다 int입니다. 최소 int 이상에 담아야 합니다. 아니면 형 변환까지 거쳐야 합니다.
↘double형은 int로 나누면, double형이 나옵니다. 그래서 double형이 받을 수 있는 것입니다.
1-2. [예제] 산술 연산자 2
1-3. [예제] 산술 연산자 3
1-4. [예제] 산술 연산자 4
1-5. [예제] 산술 연산자 5
1-6. [예제] char 타입 연산 1
1-7. [예제] char 타입 연산 2
1-8. [예제] char 타입 연산 3
1-9. [예제] char 타입 연산 4
1-10. [예제] 오버플로우 1
↘이런 연산을 하면 안 된다는 걸 보여줍니다.
↘long형으로 작업을 하면 우리가 원하는 결과를 얻을 수 있습니다. 굳이 타입을 8개나 놓고 구분하는 이유입니다.
1-11. [예제] 오버플로우 2
1-12. [예제] 산술 연산 전에 오버플로우를 탐지
1-13. [예제] 정확하게 계산할 때에는 부동소수점 타입을 사용하지 않는다.
정확하게 계산해야 할 때는 부동소수점(실수) 타입을 사용하지 않는 것이 좋다.
신용권, 『이것이 자바다』, 한빛미디어(주), 2015년, p.81.
출력된 결과를 보면 result 변수의 값은 0.29999999999999993이 되어 정확히 0.3이 되지 않는다. 이것은 이진 포맷의 가수를 사용하는 부동소수점 타입(float, double)은 0.1을 정확히 표현할 수 없어 근사치로 처리하기 때문이다.
신용권, 『이것이 자바다』, 한빛미디어(주), 2015년, p.82.
항상 숫자가 들어가는 연산에 있어서는 결과를 꼭 봐야 합니다. 특히나 double형이나 float 가지고 하는 작업은 소수점을 꼭 보고, 내가 원하는 게 안 나왔을 때는 다른 방법을 찾으면 됩니다.
2. NaN과 Infinity 연산
*0으로 나누는 것은 연산에 있어서 있을 수 없습니다. ArithmeticException 에러가 발생합니다. (Arithmetic은 산술연산, Exception은 예외.) 작업을 할 때 0으로 절대로 나누면 안 됩니다.
자바는 프로그램 실행 도중 예외가 발생하면 실행이 즉시 멈추고 프로그램은 종료된다.
신용권, 『이것이 자바다』, 한빛미디어(주), 2015년, p.83.
그러나 실수 타입인 0.0 또는 0.1f로 나누면 ArithmeticException이 발생하지 않고, / 연산의 결과는 Infinity(무한대) 값을 가지며, % 연산의 결과는 NaN(Not a Number)을 가진다.
신용권, 『이것이 자바다』, 한빛미디어(주), 2015년, p.83.
2-1. [예제] Infinity와 NaN
↘z를 출력해 보면, 정말 Infinity가 나오는 걸 볼 수 있습니다. 절대로 실수 0.0으로 나누지 맙시다.
↘Infinity에 2를 더하면 Infinity입니다.
2-2. [예제] "NaN" 문자열의 문제점
↘[val]은 NaN입니다. 10000.0에 NaN을 더하니 결국은 NaN이 나왔습니다.
2-3. [예제] "NaN"을 체크하고 연산 수행
3. 확인문제
3-1. [확인 문제] 산술 연산자 1
↘[534/30]의 몫이 똑같이 나누어 준 개수가 됩니다. 나눗셈해서 몫과 나머지를 구하면 됩니다.
3-2. [확인 문제] 산술 연산자 2
↘356을 100으로 나누면 3.56이 나옵니다. int를 int로 나누니 결과는 3이 됩니다.
3-3. [확인 문제] 산술 연산자 3
*사다리꼴의 넓이 = (윗면 + 밑면) * 높이 / 2
↘괄호가 제일 중요합니다. 괄호를 치는 순간, 괄호부터 연산이 됩니다.
↘만약에 [.]이 빠져버리면 [52.5]가 아니라 [52.0]가 나옵니다. [2.0]으로 나눠서 소수점 자리가 나오게 한 것입니다.
3-4. [확인 문제] Infinity와 NaN