본문 바로가기
코딩

[ Java ] 자바-입문 3. 연산자

by 모두의 아카이브 2024. 2. 2.
반응형

연산자 종류

  • 산술연산자: + , - , * , / , % (나머지연산자)
  • 증감(증가 및 감소) 연산자: ++ , --
  • 비교연산자: == , != , > , < , >= , <=
  • 논리 연산자: && (AND), || , !
  • 대입연산자: = , += , -= , *=
  • 삼항 연산자: ? :

연산자와 피연산자

3 + 4
a + b
  • 연산자: 연산 기호(+, -)
  • 피연산자: 연산 대상(3, 4, a, b)

1. 산술연산자

산술 연산자는 주로 숫자를 계산하는 데 사용된다. 우리가 이미 잘 알고 있는 수학 연산을 수행한다.

  • + (더하기)
  • - (빼기)
  • * (곱하기)
  • / (나누기)
  • % (나머지)

주의사항!

1. 자바에서 같은 int형끼리 계산하면 계산 결과도 같은 int형을 사용한다. int형은 정수이기 떄문에 소수점 이하를 포함할 수 없다. ex) 5 /2 -> 2.5가 되어야 하지만 결과는 소수점이 제거된 2이다.

2. 0으로 나눌 수 없다.

 

문자열 더하기

  • 자바는 특별하게 문자열에 + 연산자를 사용하면 두 문자를 연결할 수 있다

1. 문자열 + 문자열

    String result1 = "hello " + "world" "hello "

    문자열과 "world" 문자열을 더해서 "hello world" 문자열을 만든다.

 

2. 문자열 + 숫자

  • 자바에서 문자와 숫자를 더하면 숫자를 문자열로 변경한 다음에 서로 더한다
  • "a + b = " + 10
    - 문자: "a+b="
    - 숫자: 10
"a + b = "(String) + 10(int) //문자열과 숫자 더하기
"a + b = "(String) + "10"(int -> String) //숫자를 문자열로 변경
"a + b = " + "10" //문자열과 문자열 더하기
"a + b = 10" //결과

 

연산자 우선순위

1. 상식선에서 우선순위 사용

→ 덧셈, 뺄셈보다 곱셈이 우선순위가 높다., 괄호가 가장 높다 정도만 이용

 

2. 애매하면 괄호() 사용하기

→ 연산자 우선 순위가 애매하면 괄호를 사용하여 우선순위를 명시적으로 지정


2. 증감 연산자

  •  ++, -- 를 사용 
  • 변수의 값을 1만큼 증가시키거나 감소시킴

전위,후위 증감연산자

증감연산자는 피연산자 앞에 두거나 뒤에 둘 수 있으며, 연산자의 위치에 따라 연산이 수행되는 시점이 달라짐

  • ++a : 연산이 진행되기 전 증감연산이 먼저 수행됨. 이것을 앞에 있다고 해서 전위(Prefix) 증감 연산자라 한다.
  • a++ : 다른연산이 진행된 후 증감연산이 수행됨. 이것을 뒤에 있다고 해서 후위(Postfix) 증감 연산자라 한다.

3. 비교 연산자

  • == : 동등성 (equal to)
  • != : 불일치 (not equal to)
  • > : 크다 (greater than)
  • < : 작다 (less than)
  • >= : 크거나 같다 (greater than or equal to)
  • <= : 작거나 같다 (less than or equal to)
  • 비교 연산자를 사용하면 참( true ) 또는 거짓( false )으로 결과값이 나온다. 이때 boolean 형을 사용한다.

문자열 비교

문자열 비교는 ==이 아니라 .equals() 메서드 사용


4. 논리 연산자

  • boolean형인 true,false 비교하는데 사용
  • 논리 연산자
    • && (그리고) : 두 피연산자가 모두 true면 참을 반환, 둘중 하나라도 false면 false를 반환
    • || (또는) : 두 피연산자 중 하나라도 true면 참을 반환, 둘다 false면 false을 반환
    • ! (부정) : 피연산자의 논리를 반대로 반환 → 즉, true면 false를, false면 true를 반환

논리연산자 활용

boolean result = a > 10 && a < 20; //(a > 10) && (a < 20)

-> boolean result = 10 < a && a < 20;

 

범위를 나타내는 경우 이렇게 작성하면 코드를 조금 더 읽기 좋다.


대입 연산자

  • 대입 연산자(=)는 값을 변수에 할당하는 연산자다.
  • 축약(복합)대입 연산자
    • 산술 연산자와 대입 연산자를 한번에 축약해서 사용
    • 연산자 종류: += , -= , *= , /= , %=
    • 이 연산자는 연산과 대입을 한번에 축약해서 처리한다. 다음 왼쪽과 오른쪽의 결과는 같다.
      i = i + 3  i += 3
      i = i * 4  i *= 4

배운점

다양한 연산자의 종류에 대해 알게 되었고, 연산자의 우선순위 2가지만 잘 기억하고 있으면 될것 같다.

문자열비교에서  == 이 아닌 .equals()를 사용해야 되는 이유를 찾아본 결과

 

String은 참조형이기 때문에 ==은 객체의 메모리 주소를 비교한다.

그렇기 때문에 우리가 원하는 값을 비교하고 싶다면 equals 메소드를 사용해서 비교해야한다.

 

- 정리- 

원시데이터 타입인 boolean, byte, char, short, int, long, float, double (8개)는 메모리(stack)에 공간이 할당되며

그 공간에 실제 값이 들어가게 된다.

따라서 == 연산자로 비교하게 되면 가리키는 값을 토대로 비교하게 된다.

 

원시데이터 타입이 아닌 클래스들은 new 키워드를 통한 인스턴스가 만들어지는 시점에서 또 다른 메모리 구역(heap)에 새로운 공간을 할당하여 값을 저장하고 변수는 그 값이 저장된 메모리 주소를 가리키게 된다.

따라서 ==연산자를 이용할 경우 그 메모리 주소를 비교하게 된다.

반응형