연산자 시작
+,-,*,/와 같이 계산을 수행하는 기호를 연산자라 한다.
연산자 종류
+,-,*,/,% (나머지 연산자)++,--==,!=,>,<.>=,<=&&(AND),||(OR),!(NOT)=,+=,-=,*=,/=,%=?:연산자와 피연산자
+,-3,4,a,bOperator1
package operator;
public class Operator1 {
public static void main(String[] args) {
//변수 초기화
int a = 5;
int b = 2;
//덧셈
int sum = a + b;
System.out.println("a + b = " + sum); //출력 a + b = 7
// 뺄셈
int diff = a - b;
System.out.println("a - b = " + diff);
// 곱셈
int multi = a * b;
System.out.println("a * b = " + multi);
// 나눗셈
int div = a / b;
System.out.println("a / b = " + div);
// 나머지
int mod = a % b;
System.out.println("a % b = " + mod);
//int z = 10 / 0;
}
}
int sum = a + b 계산 과정
int sum = a + b //1. 변수 값 읽기
int sum = 5 + 2 //2. 변수 값 계산
int sum = 7 //3. 계산 결과를 sum에 대입
sum = 7 //최종 결과
실행 결과
a + b = 7
a - b = 3
a * b = 10
a / b = 2
a % b = 1
자바에서 int형은 정수이기 때문에 소수점 이하를 포함할 수 없다.
나머지 연산자(%)
주의! 0으로 나누기
숫자는 0으로 나눌 수 없다. 이 경우 프로그램에 오류가 발생한다.
자바는 특별하게 문자열에도 + 연산자를 사용할 수 있다.
package operator;
public class Operator2 {
public static void main(String[] args) {
//문자열과 문자열 더하기1
String result1 = "hello " + "world";
System.out.println(result1);
//문자열과 문장열 더하기2
String s1 = "string1";
String s2 = "string2";
String result2 = s1 + s2;
System.out.println(result2);
//문자열과 숫자 더하기1
String result3 = "a + b = " + 10;
System.out.println(result3);
//문자열과 숫자 더하기2
int num = 20;
String str = "a + b = ";
String result4 = str + num;
System.out.println(result4);
}
}
실행 결과
hello world
string1string2
a + b = 10
a + b = 20
문자와 숫자를 더하면 숫자를 문자열로 변경한 다음에 서로 더한다.
String타입에 다른 타입을 더하는 경우 대상 타입을 문자열로 변경한다.수학에서 덧셈보다 곱셈이 우선순위가 더 높다. 자바도 마찬가지이다.
package operator;
public class Operator3 {
public static void main(String[] args) {
int sum1 = 1 + 2 * 3;
int sum2 = (1 + 2) * 3;
System.out.println("sum1 = " + sum1);
System.out.println("sum2 = " + sum2);
}
}
실행 결과
sum1 = 7
sum2 = 9
연산자 우선순위를 변경하려면 수학과 마찬가지로 괄호()를 사용한다. ()를 사용한 곳이 먼저 계산된다.
조금 더 복잡한 예제
package operator;
public class Operator4 {
public static void main(String[] args) {
int sum3 = 2 * 2 + 3 * 3;
int sum4 = (2 * 2) + (3 * 3); //sum3과 같다
System.out.println("sum3 = " + sum3);
System.out.println("sum4 = " + sum4);
}
}
실행 결과
sum3 = 13
sum4 = 13
이렇게 복잡한 경우 괄호를 명시적으로 사용하는 것이 더 명확하고 이해하기 쉽다.
연산자 우선순위가 애매하거나 조금이라도 복잡하다면 언제나 괄호를 고려하자.
연산자 우선순위 암기법
2.애매하면 괄호를 사용하자
복잡해보이면 괄호를 사용해서 우선순위를 명시적으로 지정하자.
정리
증감 연산자는 ++와--로 표현되며, 이들은 변수의 값을 1만큼 증가시키거나 감소시킨다.
OperatorAdd1
package operator;
public class OperatorAdd1 {
public static void main(String[] args) {
int a = 0;
a = a + 1;
System.out.println("a = " + a); //1
a = a + 1;
System.out.println("a = " + a); //2
//증감 연산자
++a; //a = a + 1
System.out.println("a = " + a);
++a; //a = a + 1
System.out.println("a = " + a);
}
}
실행 결과
a = 1
a = 2
a = 3
a = 4
변수 a의 값을 하나 증가하려면 a = a + 1 연산을 수행해야 한다.
자기 자신에 1을 더하고 그 결과를 자신에게 다시 저장해야 한다.
**전위,후위 증감연산자
증감 연산자는 피연산자 앞에 두거나 뒤에 둘 수 있으며, 연산자의 위치에 따라 연산이 수행되는 시점이 달라진다.
OperatorAdd2
package operator;
public class OperatorAdd2 {
public static void main(String[] args) {
//전위 증감 연산자 사용 예
int a = 1;
int b = 0;
b = ++a; //a의 값을 먼저 증가시키고, 그 결과를 b에 대입
System.out.println("a = " + a + " , b = " + b);
//후위 증감 연산자 사용 예
a = 1; //a 값을 다시 1로 지정
b = 0; //b 값을 다시 0으로 지정
b = a++; //a의 현재 값을 b에 먼저 대입하고, 그 후 a 값을 증가시킴
System.out.println("a = " + a + ", b = " + b); //결과: a = 2, b = 1
}
}
실행 결과
a = 2 , b = 2
a = 2, b = 1
비교 연산자는 두 값을 비교하는데 사용한다.
==: 동등성!=: 불일치비교 연산자를 사용하면 참(true) 또는 거짓(false)이라는 결과가 나온다. 참 거짓은 boolean형을 사용한다.
주의할 점은 =와==는 다르다는 점이다.
=: 대입 연산자, 변수에 값을 대입한다.==: 동등한지 확인하는 비교 연산자불일치 연산자는 !=를 사용한다.!는 반대라는 뜻이다.
Comp1
package operator;
public class Comp1 {
public static void main(String[] args) {
int a = 2;
int b = 3;
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);
//결과를 boolean 변수에 담을 수 있다
boolean result = a==b;
System.out.println(result);
}
}
실행 결과
false
true
false
true
false
true
false
문자열 비교
문자열이 같은지 비교할 때는==이 아니라.eqquals()메서드를 사용해야 한다.
==를 사용하면 성공할 때도 있지만 실패할 때도 있다.
Comp2 - 문자열 비교 예시
package operator;
public class Comp2 {
public static void main(String[] args) {
String str1 = "문자열1";
String str2 = "문자열2";
boolean result1 = "hello".equals("hello"); //리터럴 비교
boolean result2 = str1.equals("문자열1"); //문자열 변수, 리터럴 비교
boolean result3 = str1.equals(str2); //문자열 변수 비교
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
}
실행 결과
true
true
false
논리 연산자는 boolean형인 true,false를 비교하는데 사용한다.
논리 연산자
&&(그리고): 두 연산자가 모두 참이면 참을 반환, 둘중 하나라도 거짓이면 거짓을 반환||(또는): 두 피연산자 중 하나라도 참이면 참을 반환, 둘다 거짓이면 거짓을 반환!(부정): 피연산자의 논리적 부정을 반환. 즉, 참이면 거짓을, 거짓이면 참을 반환Logical1
package operator;
public class Logical1 {
public static void main(String[] args) {
System.out.println("&&: AND 연산");
System.out.println(true && true);
System.out.println(true && false);
System.out.println(false && false);
System.out.println("||: OR 연산");
System.out.println(true || true);
System.out.println(true || false);
System.out.println(false || false);
System.out.println("! 연산");
System.out.println(!true);
System.out.println(!false);
System.out.println("변수 활용");
boolean a = true;
boolean b = false;
System.out.println(a && b);
System.out.println(a || b);
System.out.println(!a);
System.out.println(!b);
}
}
실행 결과
&&: AND 연산
true
false
false
||: OR 연산
true
true
false
! 연산
false
true
변수 활용
false
true
false
true
논리 연산자 활용
논리 연산자를 활용하는 다음 코드를 만들어보자.
변수a가10보다 크고 20보다 작은지 논리 연산자를 사용해서 확인해보자.
Logical2
package operator;
public class Logical2 {
public static void main(String[] args) {
int a = 15;
//a는 10보다 크고 20보다 작다
boolean result = a > 10 && a < 20; //(a > 10) && (a < 20)
System.out.println("result = " + result);
}
}
실행 결과
result = true
축약(복합)대입 연산자
산술 연산자와 대입 연산자를 한번에 축약해서 사용할 수 있는데, 이것을 축약(복합)대입 연산자라 한다.
연산자 종류 : +=,-=,*=,/=,%=
이 연산자는 연산과 대입을 한번에 축약해서 처리한다.
i = i + 3 ->i += 3
i = i * 4 ->i *= 4
Assign1
package operator;
public class Assign1 {
public static void main(String[] args) {
int a = 5;
a += 3; // 8 (5 + 3) : a = a + 3
a -= 2; // 6 (8 - 2) : a = a - 2
a *= 4; // 24 (6 * 4) : a = a * 4
a /= 3; // 8 (24 / 3) : a = a / 3
a %= 5; // 3 (8 % 5) : a = a % 5
System.out.println(a);
}
}
실행 결과
3
문제1 - int와 평균
문제1-풀이
OperationEx1
package operator.ex;
public class OperationEx1 {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int num3 = 30;
int sum = num1 + num2 + num3;
int average = sum / 3;
System.out.println(sum);
System.out.println(average);
}
}
실행 결과
60
20
문제2 - double과 평균
다음 double 변수들을 선언하고 그 합과 평균을 출력하는 프로그램을 작성하세요.
double val1 = 1.5;
double val2 = 2.5;
double val3 = 3.5;
문제 풀이
package operator.ex;
public class OperationEx2 {
public static void main(String[] args) {
double val1 = 1.5;
double val2 = 2.5;
double val3 = 3.5;
double sum = val1 + val2 + val3;
double avg = sum / 3;
System.out.println(sum);
System.out.println(avg);
}
}
실행 결과
7.5
2.5
문제3 - 합격 범위
문제 풀이
package operator.ex;
public class OperationEx3 {
public static void main(String[] args) {
int score = 80;
boolean result = score >= 80 && score <= 100;
System.out.println(result);
}
}
실행 결과
true
오늘은 계산을 할때 이용되는 다양한 연산자 종류와 어떻게 활용되는지 공부해보았는데, 공부하면서 느낀점은 연산자를 사용해서 코딩을 할때 최대한 축약해서 보기에 명확하고 단순하게 만들어야 한다는 점을 많이 느낀 것 같다. 이 부분이 가장 중요한 부분이라고 생각한다. 그리고 많은 연산자 부분 중에 내가 중요하게 이해한 부분은 먼저 왼쪽에 있는 것 부터 순서로 실행시킨다고 머리로 정리했다.
예로 ++a를 보면 왼쪽에 있는 ++를 먼저 실행시키고 대입시키는 순서가 중요하다 는 것을 이해했다.
출처