연산자

김상훈·2024년 3월 13일

Java

목록 보기
9/22

연산자란

연산을 수행하는 기호

  • 연산자(Operator): 사칙연산(+-*/)을 비롯해서 다양한 연산을 수행하게끔 하는 기호
  • 피연산자(Operand): 연산되어지는 연산의 대상( x + y에서 x 변수와 y변수)
  • 식(Expression): 연산자와 피연산자를 조합하여 게산하고자 하는 바를 표현한 것
  • 평가(Evaluation): 식을 계산하여 결과를 얻는 것

일반적으로 식이 평가되서 결과를 얻더라도 쓰이지 않으면 사라지기 때문에(소멸됨) 연산자 중 대입 연산자(=)를 사용해서 값을 저장함 (출력용; sysout)

연산자의 종류

종류연산자설명
산술 연산자+ - * / %사칙연산과 나머지 연산
비트 연산자<< >>비트를 좌우로 이동하는 연산자
비교 연산자> < >= <= == !=크기와 같음을 비교하는 연산자
논리 및 비트 연산자&& || ! & | ^ ~논리 및 비트 연산을 수행하는 연산자
대입 연산자=우변 값을 좌변에 대입하는 연산자
기타(type) ?: instanceof형변환, 삼항 연산자, instanceof 연산자
  • 피연산자 갯수로 연산자 분류
    • (한 개) 단항 연산자

    • (두 개) 이항 연산자

    • (세 개) 삼항 연산자

      보통 대부분의 연산자는 이항 연산자다.

연산자의 우선순위

조건: 식에 사용된 연산자가 둘 이상인 경우

연산자의 우선순위에 의해 연산되는 순서가 결정됨

  • 단항 연산자 > 이항 연산자
  • 곱셈, 나눗셈 > 덧셈 뺄셈
  • 산술 연산자 > 비교 연산자 > 논리 연산자 > 대입 연산자

연산자의 결합 규칙

조건: 식에 사용된 연산자들의 우선순위가 같을 경우

연산자의 결합 규칙에 의해 연산되는 순서가 결정됨

  • 단항 연산자, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽

자동 형변환이란

변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우

  • 자동 형변환은 기존 값을 최대한 보존할 수 있는 타입으로 변환
  • 저장 범위
    • 좁은 타입 → 넓은 타입: 값 손실이 없기 때문에 두 타입 중 넓은 쪽으로 자동 형변환
    • 넓은 타입 → 좁은 타입: 값 손실이 발생하기 때문에 반드시 형변환 연산자를 사용해야 가능

Instanceof 연산자란

객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는데 사용하는 연산자

→ 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용

문법

<object> instanceOf <type>

object가 type이거나 type을 상속받는 클래스라면 true를 리턴

화살표 연산자란

람다 표현식을 구성하는 데 사용

람다식이란

람다식 장점

  • 간결하면서 이해하기 쉬움
  • 함수를 정의하기 위해 클래스를 새로 만들 필요없이 필요시 바로 람다식으로 통한 메서드 역할 수행 가능
  • 람다식을 사용하여 메서드를 변수처럼 다루기 가능
    • 다른 메서드의 매개변수로 전달되어지는 것이 가능
    • 메서드의 결과로 반환되는 것이 가능

람다식 단점

  • 지나치게 남발 시 코드가 어려워지고 지저분해짐
  • 람다를 사용하여 만든 무명함수는 재사용 불가능
  • 디버깅 어려움
  • 모든 원소를 전부 순회하는 경우 느림
  • 재귀로 만들기에 부적합

람다식 예시

//일반 메서드
int max(int a, int b) {
  return a>b ? a : b;

//람다 표현
(a, b) -> a>b ? a : b;
//일반 메서드
void printNumber(String name, int number) {
  System.out.println(name + ": " + number);
}

//람다 표현
(name, number) -> System.out.println(name + ": " + number);

삼항 연산자란

조건문을 더 간결하게 표현 가능

삼항 연산자 예시

int max(int a, int b) {
  if (a>b) {
  return a
  } else {
  return b
  }
}

int max(int a, int b) {
  return a>b ? a : b;

0개의 댓글