Post

[Java] 05. 연산자

[Java] 05. 연산자

1. 증감 연산자

i++; 또는 ++i;를 작성하면 “i에 1을 더한다”라는 의미가 됩니다

타입설명사용 예
전위형값이 참조되기 전에 증가/감소k = ++i;
j = –i;
후위형값이 참조된 후에 증가/감소k = ++i;
j = –i;

증감 연산자는 -- 또는 ++를 앞뒤에 붙이면 참조되기 전후로 값이 바뀝니다
예시로 간단하게 알아봅시다

1
2
3
4
5
6
7
8
9
int a = 10, b = 10;

// 증감 연산자를 사용하며 출력
System.out.println("a++ = " + a++);     // 10 출력
System.out.println("++b = " + ++b);     // 11 출력

// a, b를 한 번 더 출력
System.out.println("a = " + a);         // 11 출력
System.out.println("b = " + b);         // 11 출력

System.out.println이 실행될 때, a는 출력이 된 후에 1을 더하고 b는 1을 더한 뒤에 출력을 하게 됩니다
그리고 한 번 더 출력을 해보면 a와 b는 이미 1씩 더해진 값으로 출력이 되는 것을 확인할 수 있습니다


2. 사칙연산자와 산술변환

단순히 더하고 빼고 곱하고 나누는 계산이지만 두 피연산자의 타입이 다르면 계산이 다르게 진행됩니다

  1. 두 피연산자의 타입을 같게 일치시킨다 (더 큰 타입으로 일치)
    • ( long + int ) -> ( long + long ) -> long
    • ( float + int ) -> ( float + float ) -> float
  2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다
    • ( byte + short ) -> ( int + int ) -> int
    • ( char + short ) -> ( int + int ) -> int


3. Math 클래스와 나머지 연산자

3-1. Math 클래스

“메서드”는 특정한 기능을 수행하기 위해 코드로 작성된 단위로, “함수”처럼 작동한다고 볼 수 있습니다
하지만 메서드와 함수의 자세한 내용에는 차이가 있으니 알아둡시다

Math 클래스를 사용하면 수학과 관련된 다양한 메서드를 사용할 수 있습니다
코드로 Math.을 입력하면 뒤이어 다양한 메서드가 있는 것을 볼 수 있으며, 구글에 검색하거나 메서드의 설명서를 보며 용도를 파악할 수 있습니다

img

반올림 메서드인 round가 2개가 있는데, float값을 넣으면 int로 반환하고 double로 넣으면 long으로 반환됩니다
이렇게 같은 메서드라도 넣는 값에 따라 반환되는 타입이 달라지기 때문에 이 부분을 유의하며 사용하면 되겠습니다

  • round() : 실수의 소수점 첫 번째 자리에서 반올림한 정수로 반환
  • ceil() : 올림값을 double형으로 반환
  • floor() : 내림값을 double형으로 반환
  • abs() : int, double형으로 절대값을 반환

등등 다양한 메서드의 자세한 내용은 직접 사용해보거나 찾아보도록 합시다


3-2. 나머지 연산자

사칙 연산자에서 나누기를 담당하는 /는 사실 “몫”만 반환합니다
만약 값을 나눈 다음에 나머지까지 구해야 한다면 %를 사용하면 됩니다

1
2
3
4
5
6
7
8
9
10
11
12
int x = 123;
int y = 17;

System.out.print("126을 17로 나눈 몫 : ");      // print : 개행(줄바꿈) 없이 출력
System.out.println(x / y);                     // println : 출력하며 개행(줄바꿈)

System.out.print("126을 17로 나눈 나머지 : ");
System.out.println(x % y);

// 출력 결과 :
// 126을 17로 나눈 몫 : 7
// 126을 17로 나눈 나머지 : 4


4. 비교 연산자와 문자열의 비교

4-1. 비교 연산자

[ > ]과 [ >= ]의 차이는 “미만”과 “이하”의 차이가, 반대로 사용하면 “초과”와 “이상”의 차이가 있습니다
[ 17 > 17 ] : 거짓(false) / [ 17 >= 17 ] : 참(true)

비교 연산자는 같음을 나타내는 ==과 다름을 나타내는 !=, 그리고 크기를 비교하는 <, <=, >, >=가 있습니다
결과값은 boolean타입의 true 또는 false가 반환됩니다

1
2
3
4
5
6
7
8
int a = 17;
int b = 20;
int c = 17;

System.out.println("a == b : " + (a == b));     // False
System.out.println("a != c : " + (a != c));     // False
System.out.println("a > b : " + (a > b));       // False
System.out.println("a <= c : " + (a <= c));     // True


4-2. 문자열의 비교

문자열에 대한 자세한 내용은 다음에 알아보겠습니다

문자열을 사용하는 String 타입은 ==!=으로 비교를 하면 의미가 달라집니다

  • == : 두 피연산자의 주소값을 비교
  • equals : 두 피연산자의 값 자체를 비교

주소값을 다루는 내용은 아직 학습하기 전이라 완벽하게 이해가 되지 않을 수 있습니다
지금은 String 타입의 두 값을 비교하려면 equals를 사용해야 한다”만 외워도 충분합니다

1
2
3
4
5
String str1 = "안녕하세요";
String str2 = "반갑습니다";

System.out.println("str1.equals(str2) = " + str1.equals(str2));     // False
System.out.println("!str1.equals(str2) = " + !str1.equals(str2));   // True

Boolean 타입의 값의 앞에 “ ! “를 붙이면 값이 반대로 반환됩니다


5. 논리 연산자

만약 값 a, b, c에 대해 (a == b)와 (b == c), 둘 다 맞는지를 확인하고 싶다면 논리 연산자를 사용하면 됩니다

  • && : 논리식이 모두 ‘참’이면 ‘참’을 반환 (논리 AND 연산)
  • || : 논리식이 하나라도 ‘참’이면 ‘참’을 반환 (논리 OR 연산)
  • ! : 논리식이 참이면 거짓을, 거짓이면 참을 반환 (논리 NOT 연산)

여기서 “ ! “은 앞의 문자열의 비교파트에 사용했었습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int a = 17;
int b = 18;
int c = 18;

System.out.println("a == b 그리고 b == c : " + (a == b && b == c));   // False
System.out.println("a == b 또는 b == c : " + (a == b || b == c));     // True
System.out.println("!(a == b) : " + !(a == b));                      // True
System.out.println("!(b <= c) : " + !(b <= c));                      // False

// 출력 결과 : 
// a == b 그리고 b == c : false
// a == b 또는 b == c : true
// !(a == b) : true
// !(b <= c) : false


6. 조건 연산자와 대입 연산자

6-1. 조건 연산자

만약 문자열에다가 나이 19보다 많을 경우 “어른”, 아닐 경우 “어린이”를 넣고 싶다면 조건식을 사용할 수 있습니다
(조건) ? (참값) : (거짓값)을 사용하면 조건이 맞으면 참값, 틀리면 거짓값을 대입할 수 있게 됩니다

1
2
3
4
5
int age = 21;
String str = age > 19 ? "어른" : "어린이";

System.out.println("나이가 : " + age + "이면 " + str +"이다.");
// 출력 결과 : 나이가 : 21이면 어른이다.


6-2. 대입 연산자

변수에는 두 가지 방법으로 값을 더하거나 빼는 연산을 할 수 있습니다

  • a = a + 1;
  • a += 1; // 대입 연산자 사용

+= 또는 -=, /= %= 등등 연산 뒤에 =을 붙임으로서 계산을 하며 대입도 할 수 있는 대입 연산자를 사용하면 됩니다

1
2
3
4
5
6
int a = 10;
a *= 4;     // a : 40
a -= 7;     // a = 33
a %= 13;    // a = 7

System.out.println(a);  // "7" 출력



마무리

비트 연산자는 작성하지 않았는데 1의 보수, 2의 보수와 2진수의 계산을 알아보면서 작성하도록 하겠습니다

This post is licensed under CC BY 4.0 by the author.