이 게시글은 인프런 "김영한의 자바 입문" 강의를 바탕으로 작성했습니다:)
+ , - , * , / 와 같이 계산을 수행하는 기호를 연산자라 한다.
+ , - , * , / , %(나머지 연산자)++ , --== , != , > , < , >= , <=&&(AND), ||(OR), !(NOT)= , += , -= , *= , /= , %=? :3 + 4
a + b
+ , -3 , 4 , a , b산술 연산자는 주로 숫자를 계산하는 데 사용된다.
+ (더하기)- (빼기)* (곱하기)/ (나누기)% (나머지)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); //출력:a-b=3
//곱셈
int multi = a * b;
System.out.println("a * b = " + multi); //출력:a*b=10
//나눗셈
int div = a / b;
System.out.println("a / b = " + div); //출력:a/b=2
//나머지
int mod = a % b;
System.out.println("a % b = " + mod); //출력:a%b=1
}
}
실행결과
a + b = 7
a - b = 3
a * b = 10
a / b = 2
a % b = 1
5 / 2의 결과는 2.5가 되어야 하지만 결과는 소수점이 제거된 2가 나왔다.int 형끼리 계산하면 계산 결과도 같은 int 형을 사용한다. int 형은 정수이기 때문에 소수점 이하를 포함할 수 없다.%)5 / 2 는 몫이 2 나머지가 1이다. 따라서 나머지 연산자 5 % 2 의 결과는 1 이 된다10 / 0 과 같이 숫자는 0으로 나눌 수 없다. (수학에서 허용하지 않음)
방금 예제에서 변수 b = 0 을 대입하면 5 / 0 이 된다. 이 경우 프로그램에 오류가 발생한다.
실행하면 다음과 같은 예외가 발생한다.
Exception in thread "main" java.lang.ArithmeticException: / by zero
예외가 발생하면 해당 시점 이후의 결과가 출력되지 않고 프로그램이 종료된다.
자바는 특별하게 문자열에도 + 연산자를 사용할 수 있다. 문자열에 + 연산자를 사용하면 두 문자를 연결할 수 있다.
package Operator;
public class Operator2 {
public static void main(String[] args) {
//문자열과 문자열 더하기
String result1 = "hello " + "world";
System.out.println(result1);
//문자열과 문자열 더하기2
String s1 = "string1";
String s2 = "string2";
String result2 = s1 + s2;
System.out.println(result2);
//문자열과 숫자 더하기
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
자바에서 문자와 숫자를 더하면 숫자를 문자열로 변경한 다음에 서로 더한다.
"a + b = " + 10
"a + b = "10package Operator;
public class Operator4 {
public static void main(String[] args) {
int sum3 = 2 * 2 + 3 * 3; //(2 * 2) + (3 * 3)
int sum4 = (2 * 2) + (3 * 3); //동일함
System.out.println("sum3 = " + sum3);
System.out.println("sum4 = " + sum4);
}
}
실행결과
sum3 = 13
sum4 = 13
연산자 우선순위가 애매하거나 조금이라도 복잡하다면 언제나 괄호를 고려하는게 좋다.
처음에 나오는 괄호 () 가 우선순위가 가장 높고, 마지막의 대입 연산자(=)가 우선순위가 가장 낮다.
++ , -- , ! , ~ , new , (type) )* , / , % 우선, 그 다음에 + , - )<< , >> , >>> )< , <= , > , >= , instanceof )instanceof 연산자: 객체 타입을 확인한다.== , != )& , ^ , | ) → 실무에서 거의 사용 안 함&& , || )? : )= , += , -= , *= , /= ,%= 등등)그외: new , [] (배열 인덱스), . (객체 멤버 접근), () (메소드 호출
증가 및 감소 연산자를 줄여서 증감 연산자라 한다.
증감 연산자는 ++ 와 -- 로 표현되며, 이들은 변수의 값을 1만큼 증가시키거나 감소시킨다.
프로그래밍에서는 값을 1씩 증가하거나 1씩 감소할 때가 아주 많기 때문에 이런 편의 기능을 제공한다
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); //3
++a; // a = a + 1
System.out.println("a = " + a); //4
}
}
실행결과
a = 1
a = 2
a = 3
a = 4
a = a + 1 을 ++a 로 간단히 표현할 수 있는 것이 바로 증감 연산자이다.
정리하면 해당 변수에 들어있는 숫자 값을 하나 증가하는 것이다.
++ (증가), -- (감소)
값을 하나 감소할 때는 --a 와 같이 표현하면 된다. 이것은 a = a - 1 이 된다
증감 연산자는 피연산자 앞에 두거나 뒤에 둘 수 있으며, 연산자의 위치에 따라 연산이 수행되는 시점이 달라진다.
++a : 증감 연산자를 피연산자 앞에 둘 수 있다. 이것을 앞에 있다고 해서 전위(Prefix) 증감 연산자라 한다.a++ : 증감 연산자를 피연산자 뒤에 둘 수 있다. 이것을 뒤에 있다고 해서 후위(Postfix) 증감 연산자라 한다.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=2, b=2
//후위 증감 연산자 사용 예
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
비교 연산자는 두 값을 비교하는 데 사용한다. 비교 연산자는 주로 조건문과 함께 사용한다.
비교 연산자
== : 동등성 (equal to)!= : 불일치 (not equal to)> : 크다 (greater than)< : 작다 (less than)>= : 크거나 같다 (greater than or equal to)<= : 작거나 같다 (less than or equal to)true) 또는 거짓(false)이라는 결과가 나온다. 참 거짓은 boolean 형을 사용한다.주의할 점은 = 와 == 이 다르다는 점이다.
= : 대입 연산자, 변수에 값을 대입한다.== : 동등한지 확인하는 비교 연산자불일치 연산자는 !=를 사용한다. !는 반대라는 뜻이다.
package Operator;
public class Comp1 {
public static void main(String[] args) {
int a = 2;
int b = 3;
System.out.println(a == b); // false, a와 b는 같지 않다
System.out.println(a != b); // true, a와 b는 다르다
System.out.println(a > b); // false, a는 b보다 크지 않다
System.out.println(a < b); // true, a는 b보다 작다
System.out.println(a >= b); // false, a는 b보다 크거나 같지 않다
System.out.println(a <= b); // true, a는 b보다 작거나 같다
//결과를 boolean 변수에 담기
boolean result = a == b; //a == b: false
System.out.println(result); //false
}
}
문자열이 같은지 비교할 때는 ==이 아니라 .equals()메서드를 사용해야 한다.
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 = " + result1);
System.out.println("result2 = " + result2);
System.out.println("result3 = " + result3);
}
}
실행결과
result1 = true
result2 = true
result3 = false
논리 연산자는 boolean 형인 true, false를 비교하는데 사용한다.
논리 연산자
&& (그리고) : 두 피연산자가 모두 참이면 참을 반환, 둘중 하나라도 거짓이면 거짓을 반환|| (또는) : 두 피연산자 중 하나라도 참이면 참을 반환, 둘다 거짓이면 거짓을 반환! (부정) : 피연산자의 논리적 부정을 반환. 즉, 참이면 거짓을, 거짓이면 참을 반환package Operator;
public class Logical1 {
public static void main(String[] args) {
System.out.println("&&: AND 연산");
System.out.println(true && true); //true
System.out.println(true && false);//false
System.out.println(false && false);//false
System.out.println("||: OR 연산");
System.out.println(true || true); //true
System.out.println(true || false);//true
System.out.println(false || false);//false
System.out.println("! 연산");
System.out.println(!true); //false
System.out.println(!false); //true
System.out.println("변수 활용");
boolean a = true;
boolean b = false;
System.out.println(a && b); // false
System.out.println(a || b); // true
System.out.println(!a); // false
System.out.println(!b); // true
}
}
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
boolean result = 10 < a && a < 20;
→ 범위를 나타내는 경우 이렇게 작성하면 코드를 조금 더 읽기 좋다
대입 연산자
대입 연산자(=)는 값을 변수에 할당하는 연산자다. 이 연산자를 사용하면 변수에 값을 할당할 수 있다.
축약(복합) 대입 연산자
산술 연산자와 대입 연산자를 한번에 축약해서 사용할 수 있는데, 이것을 축약(복합) 대입 연산자라 한다.
연산자 종류: += , -= , *= , /= , %=
i = i + 3 → i += 3
i = i * 4 → i *= 4
package Operator;
public class Assign1 {
public static void main(String[] args) {
int a = 5; //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