목표
자바가 제공하는 다양한 연산자를 학습하세요.
학습할 것
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표(->) 연산자
- 3항 연산자
- 연산자 우선 순위
- (optional) Java 13. switch 연산자
산술 연산자
수학적 계산 ( 사칙 연산 ) 에 사용되는 연산자이다.
| 연산자 |
기능 설명 | 에러 | |
| + | 이항 더하기 연산자 | 하나의 숫자를 다른 숫자에 더한다. | null |
| 단항 플러스 연산자 | 숫자 프로모션을 트리거하는 것과 별개로 기능을 수행 | null | |
| 문자열 연결을 수행 | 두개의 문자열을 조인하여 세번째 문자열을 제공 | null | |
| - | 이항 더하기 연산자 | 다른 숫자에서 하나의 숫자를 뺀다. | null |
| 단항 플러스 연산자 ( -1 ) | 피 연산자를 0에서 뺀 것과 같다. | null | |
| * | 이항 연산자 | 한 숫자에 다른 숫자를 곱한다. | null |
| / | 이항 연산자 | 한 숫자를 다른 숫자로 나눈다. Java 정수부는 0을 반올림.Java 부동 소수점 분할의 기본 아이디어는 결과 q 가 d . q = n 를 만족시키는 데 가장 가까운 값입니다. d* q = n . 부동 소수점 나누기의 결과는 IEEE 754 산술 규칙에 따라 결정됩니다. |
분모가 0이면 ArithmeticException |
| % | 이항 연산자 | 한 숫자를 다른 숫자로 나눌 때 나머지를 계산합니다. Java 프로그래밍 언어에서는 부동 소수점 피연산자도 허용합니다. 부동 소수점 나머지는 b 가 0 일 때와 같이 경계 케이스에서 INF 및 NaN 값을 생성 할 수 있습니다. |
정수 나머지 연산자의 제수 값이 0이면 an ArithmeticException |
| INF | "무한" 또는 INF 값은 너무 큰 숫자를 나타낸다. - INF 값은 너무 크고 음수인 숫자를 나타낸다. INF 값은 오버 플로를 일으키는 부동 연산 또는 0 으로 나누는 부동 소수점 연산에 의해 생성된다. |
||
| NAN | "무기한"/ "숫자가 아님"또는 NaN은 의미없는 작업으로 인해 발생하는 값을 나타냅니다. NaN 값은 0을 0으로 나누거나 0을 나머지로 계산하여 생성됩니다 |
||
비트 연산자와 논리 연산자
보수 ( ~ ) 연산자는 하나의 피연산자 비트를 비트 또는, 논리 반전하는 단항 연산자이다.
AND ( & ) 연산자는 두 개의 피연산자의 비트 또는 논리 "and" 를 수행하는 이항 연산자이다.
( 둘다 1이면 1 둘 중 하나가 0이면 0 )
OR ( | ) 연산자는 두 개의 피연산자의 비트 또는 논리 "포함 또는" 을 수행하는 2진 연산자이다.
( 둘 중 하나만 1 이면 1 )
XOR ( ^ ) 연산자는 두 개의 피연산자의 비트 또는 논리 "배타적 논리합" 을 수행하는 이항 연산자이다.
( 둘 중 하나는 1이고 다른 하나가 0 일 경우만 1 )
관계 연산자 (<, <=,>,> =)
<, <= 및 >= 연산자는 숫자 유형 비교를 위한 이항 연산자이다.
이러한 연산자의 결과 유형은 모든 경우에 boolean 값이다.
관계 연산자를 사용하여 숫자를 다른 유형과 비교할 수 있다.
int i = 1;
long l = 2;
if (i < l) {
System.out.println("i is smaller");
}
※ 이러한 연산자를 사용하여 문자열, 숫자 배열 등을 비교할 수 없습니다 .
- 피연산자 중 하나가 박스형이면 unbox입니다.
- 현재 피연산자 중 하나가 byte , short 또는 char 이면 int 로 승격됩니다.
- 피연산자의 유형이 동일하지 않으면 "더 작은"유형의 피연산자가 "더 큰"유형으로 승격됩니다.
- 결과는 int , long , float 또는 double 값에 대해 비교가 수행됩니다.
instanceof
객체가 특정 클래스 / 인터페이스 유형인지 여부를 확인합니다. instanceof 연산자는 다음과 같이 작성됩니다.
객체 타입을 확인하는데 사용하는 연산자. 해당 여부를 true, false 로 알려준다. 부모 객체의 인스턴스인지
자식 객체인지 를 알려줄 때 사용합니다.
객체 instanceof 클래스
( Object reference variable ) instanceof (class/interface type)
class A {}
class B extends A {}
public static void main(String[] args) {
A a = new A();
B b = new B();
System.out.println(a instanceof A); // true
System.out.println(b instanceof A); // true
System.out.println(a instanceof B); // false
System.out.println(b instanceof B); // true
}
assignment(=) operator :: 할당 연산자
값을 변수에 할당할 때 쓰는 연산자입니다

주소 할당과 값 할당을 다르게 생각해야합니다.
깊은 복사와 얕은 복사?
- 얕은 복사 : 주소를 이어준다. B를 수정하는 것은 A를 수정하는 것과 같다.
- 깊은 복사 : 값을 복사해서 제대로 복사한다.
ex ) 원본배열.clone(), Arrays.copyOf(원본배열, 내가 원하는 length까지)
System.copyOfRange(원본배열, 원하는 시작점, 원하는 끝점), System.arrayCopy()
(지정된 배열을 대상 배열의 지정된 위치에 복사해줍니다.)
- 2차원 배열의 경우 1차원 배열과 같은 방식을 취하면, a[x][y]는 얕은 복사가 된다. 무조건 반복문을 돌려서 일일이 복사해줘야합니다.

화살표 연산자
Java 8 이후부터 람다 연산자 ( -> )는 람다 식을 도입하는 데 사용되는 연산자다.
다음 예에서 볼 수 있듯이 두 가지 공통적인 구문이 있다.
람다 표현식은 익명 함수, 또는 함수 인터페이스를 구현하는 익명 클래스의 인스턴스를 보다 정확하게 정의한다.
a -> a + 1 // a lambda that adds one to its argument
a -> { return a + 1; } // an equivalent lambda using a block.
Lambda 표현식은 표현식을 사용하는 단일 메서드 인터페이스를 구현하는 명확하고 간결한 방법을 제공합니다.
// lambda 안씀
JButton btn = new JButton("My Button");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button was pressed");
}
});
인터페이스 ActionListener는 하나의 메서드 만 정의 actionPerformed()하므로 기능적 인터페이스이므로 Lambda 식을 사용하여 표준 코드를 대체 할 수 있습니다. 위의 예는 다음과 같이 Lambda 표현식을 사용하여 다시 작성할 수 있습니다.
// 람다씀
JButton btn = new JButton("My Button");
btn.addActionListener(e -> {
System.out.println("Button was pressed");
});
삼항연산자
int num1 = 5, num2 = 7;
int result;
result = (num1 - num2 > 0) ? num1 : num2;
System.out.println("두 정수 중 더 큰 수는 " + result + "입니다.");
//두 정수 중 더 큰 수는 7입니다.
연산자 우선 순위

java13 switch 연산자
입력값이 정형화되어 있고, 조건이 많은 경우 if문보다는 switch/case문을 쓰는것이 가독성에서 좀 더 유리하다.
switch(입력변수) {
case 입력값1: ...
break;
case 입력값2: ...
break;
...
default: ... // 그 외
break;
}'java' 카테고리의 다른 글
| 오버로딩과 오버라이딩 (0) | 2021.01.19 |
|---|---|
| 자바 메모리 관리 ? (0) | 2021.01.19 |
| 4주차 제어문 (0) | 2021.01.12 |
| 2주차 과제 자바 데이터 타입, 변수 그리고 배열 (0) | 2021.01.10 |
| 1주차 과제 JVM 은 무엇이며 자바 코드는 어떻게 실행하는 것인가? (0) | 2021.01.09 |