도도한 개발자
[Java] #05. 자바의 연산자 본문
* 복합 대입 연산자 (Compound Assignment Operator)
+= : 기존 값에 우측 항의 값을 더함
-= : 기존 값에 우측 항의 값을 뺌
*= : 기존 값에 우측 항의 값을 곱함
/= : 기존 값에 우측 항의 값을 나눔
%= : 기존 값에 우측 항의 값으로 나눈 나머지
public class OperatorCompound {
int intValue = 10;
public static void main(String[] args) {
OperatorCompound opr = new OperatorCompound();
opr.compound();
}
public void compound() {
System.out.println(intValue += 5); // 15
System.out.println(intValue -= 5); // 10
System.out.println(intValue *= 5); // 50
System.out.println(intValue /= 5); // 10
System.out.println(intValue %= 5); // 0
}
}
* 단항 연산자 (Unary Operator)
+ : 단항 플러스 연산자. Unary plus operator
- : 단항 마이너스 연산자. Unary minus operator
++ : 증가 연산자. Increment operator
-- : 감소 연산자. Decrement operator
! : 논리 부정 연산자. Logical complement operator
public class OperatorUnary {
public static void main(String[] args) {
OperatorUnary una = new OperatorUnary();
una.unary();
}
public void unary() {
int intVal = 5;
System.out.println(+intVal); // 5
System.out.println(-intVal); //-5
System.out.println(intVal++); // 5
System.out.println(intVal); // 6
System.out.println(++intVal); // 7
System.out.println(intVal--); // 7
System.out.println(intVal); // 6
System.out.println(--intVal); // 5
}
}
* 삼항 연산자 ? (Conditional Operator)
변수 = (boolean조건식) ? true일때의 값 : false일때의 값
* 기본 자료형의 형 변환 (Casting)
형 변환은 서로 다른 타입 사이에 변환하는 작업을 하는 것을 말한다. 자바의 형 변환은 기본 자료형과 참조 자료형 모두 괄호로 묶어주면 된다. 그러나 기본 자로형 중 형 변환이 전혀 되지 않는 것이 있다. 바로 boolean타입인데, 이는 숫자로 변환할 수 없기 때문에 형 변환이 불가능하다.
또한 기본 자료형 -> 참조 자료형, 참조 자료형 -> 기본 자료형으로의 형 변환은 절대 안된다.
byte에서 short로, short에서 byte로의 형 변환은 약간 다른데 예제로 보자.
public class OperatorCasting {
public static void main(String[] args) {
OperatorCasting cast = new OperatorCasting();
cast.casting();
cast.casting2();
}
public void casting() {
byte byteVal = 127;
short shortVal = byteVal;
shortVal++;
System.out.println(shortVal); // 128
byteVal = (byte)shortVal; //-128
System.out.println(byteVal);
}
public void casting2() {
short shortVal = 256;
byte byteVal = (byte)shortVal;
System.out.println(byteVal); // 0
shortVal = 255;
byteVal = (byte)shortVal;
System.out.println(byteVal); // -1
}
}
형 변환을 할 때 범위가 더 큰 타입으로 변환하면 아무런 문제가 없다. 그러나 범위가 작은 타입으로 형 변환을 하면, 생각치도 못한 값이 나올 수 있으므로 비트 값을 잘 보자.
128은 2의 7제곱이다. 비트로 표현하면 위와 같이 표시할 수 있다. short에서 byte로 변환한다는 것은 short 앞에 있는 1바이트(8비트)를 그냥 버리기 때문에, 결론적으로 byte로 형 변환한 결과는 아래와 같다.
byte의 가장 첫 bit가 1이면 그 값은 -128이다. 그렇기 때문에 결과가 -128로 나온 것이다.
다른 예로.
2의 8제곱 위치(9번째 위치)에 있는 값만 1인 short를 생각해보자. 이 경우 앞의 1바이트를 버리면 나머지 자리에는 모두 0밖에 안남는다.
* 실습
SalaryManager 클래스를 만들고 연금이 2000만원인 사람의 근로소득세 12.5%, 국민 연금 8.1%, 건강 보험료 13.5% 공제 후의 월급을 계산하라.
public class SalaryManager {
public static void main(String[] args) {
SalaryManager manager = new SalaryManager();
int salary = 20000000;
System.out.println(manager.getMonthlySalary(salary));
}
public double getMonthlySalary(int yearlySalary) {
double mSal = yearlySalary / 12.0;
double tax = calculateTax(mSal);
double pension = calculateNationalPension(mSal);
double insurance = calculateHealthInsurance(mSal);
double total = tax + pension + insurance;
mSal -= total;
return mSal;
}
public double calculateTax(double monthSalary) {
double tax = monthSalary * 0.125;
return tax;
}
public double calculateNationalPension(double monthSalary) {
double pension = monthSalary * 0.081;
return pension;
}
public double calculateHealthInsurance(double monthSalary) {
double insurance = monthSalary * 0.135;
return insurance;
}
}
* 정리
값을 할당할 때 사용하는 연산자의 기호는 무엇인가요?
할당 연산자는 = 이며, 우측에는 할당할 값, 좌측에는 할당 받을 변수를 위치시켜야 한다.
기본적인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지를 계산할 때 사용하는 연산자의 기호는 무엇인가요?
사칙연산 연산자는 + - * / 이며, 나머지는 % 연산자를 사용하면 된다.
+=는 무엇을 할 때 사용하는 연산자인가요?
+= 는 기존 값에 우측 항의 값을 더할 때 사용한다.
여러분들이 연산의 순서를 모르거나 확실히 하고 싶을 때에서는 어떤 기호를 사용해야 하나요?
연산할 때 연산자의 우선순위가 혼동될 경우에는 소괄호()를 사용하면 계산의 가독성을 높일 수 있다.
==와 !=의 차이는 무엇인가요?
== 는 값이 동등한지를, !=는 값이 다른지를 확인하는 연산자이다. 두 연산의 결과는 모두 boolean 타입이다.
<와 <=의 차이는 무엇인가요?
두 연산자의 차이는 우측항의 값이 포함되는지 여부이다. =이 있는 연산자는 우측항의 값을 포함한다.
! 연산자는 어떤 타입에 사용할 수 있나요?
! 연산자는 무조건 boolean 타입에만 사용할 수 있다. 해당 결과의 반대로 변환한다. (true일 때에는 false로, false일 때에는 true로 변환한다.)
? :로 표시하는 삼항 연산자의 ?와 : 뒤에 명시해 주는 값은 무엇을 의미하나요?
"? :"연산자는 값을 간편하게 할당할 때 사용한다. 조건이 true일 경우에는 ? 뒤의 값을, false일 경우에는 : 뒤의 값을 지정한다.
자바는 형 변환을 한다고 했는데, short의 값을 long에 할당할 때에는 어떤 것을 해 주어야 하나요?
short 타입을 long 타입으로 변환할 때에는 casting을 해 줄 필요가 없다.
반대로 long 값을 short에 할당할 때에는 어떤 것을 해 주어야 하나요?
long 타입을 short 타입으로 변환할 때에는 범위가 큰 타입에서 작은 타입으로 변환되는 것이기 때문에 casting을 해 줘야만 한다.
9와 10의 경우 중 어떤 경우가 가존 값이 사라지고, 엉뚱한 값으로 바뀔 수 있나요?
범위가 큰 타입으로 작은 타입으로 변환할 경우에는 값이 달라질 확률이 매우 높다.
그럼 이만.
'Backend > Java' 카테고리의 다른 글
[Java] #07. 배열의 모든 것 (0) | 2022.03.13 |
---|---|
[Java] #06. 자바의 제어문 (키워드 : 조건) (0) | 2022.03.10 |
[Java] #04. 자바의 변수들 (0) | 2022.03.10 |
[Java] #03. 클래스와 객체 (0) | 2022.03.09 |
[Java] #02. Hello World! (Eclipse에 Git연동) (0) | 2022.03.08 |