Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Number Theory
- hash table
- two pointers
- 파이썬
- Method
- Tree
- Math
- bit manipulation
- 자바
- 구현
- SQL
- simulation
- java
- Binary Search
- Binary Tree
- array
- geometry
- Stack
- Matrix
- sorting
- Class
- 코딩테스트
- Data Structure
- 코테
- implement
- database
- greedy
- string
- dynamic programming
- Counting
Archives
- Today
- Total
코린이의 소소한 공부노트
조건 연산과 대입 연산 본문
조건/대입 연산은 각각 조건/대입 연산자를 이용한 연산을 말한다.
이 글에서는 연산 위주로 설명하고 있으므로, 연산자에 대한 자세한 설명을 원한다면 아래 링크를 참조하면 된다.
2021.12.28 - [Java] - 연산자(operator)의 종류와 우선순위, 결합규칙
조건 연산자는 유일한 3항 연산자이다. 조건식 ? 식1 : 식2 순으로 쓰면 된다. 조건식이 참이면 식1의 결과가, 거짓이면 식2의 결과가 나온다.
// x와 y중 더 큰 수를 출력
int x=9, y=5;
System.out.println((x > y) ? x : y); // 9
// 괄호는 생략 가능하지만
// 가독성을 위해 쓰는 것이 좋다.
위 식은 x, y선언을 빼면 1줄이지만 if문으로 쓰면 몇 줄이 될까?
if (x>y) {
System.out.println(x);
}
else {
System.out.println(y);
}
// 차이가 많이 난다.
대입 연산자는 오른쪽 피연산자의 결괏값을 왼쪽 피연산자에 저장한 후 그 값을 반환한다. 저장까지는 이해되는데, 반환한다는 게 좀 이상하다는 생각이 들면 "모든 연산자는 연산 결과를 반환한다."는 말을 떠올려보자. 금방 받아들일 수 있다.
int x, y;
System.out.println(x = y = 3); // 3
// 대입 연산자는 오른쪽에서 왼쪽으로 결합
// 변수 y에 3을 저장한다.
// -> y의 값(3)을 불러와서 x에 저장한다.
// -> x의 값(3)을 불러와서 출력한다.
// 제대로 저장되었나 확인해보기
System.out.println(x); // 3
System.out.println(y); // 3
대입 연산자의 왼쪽 피연산자를 lvalue(엘 밸류, left value), 오른쪽 피연산자를 rvalue(알 밸류, right value)로 부르며 구분한다. 구분하는 이유는 rvalue에는 변수, 상수, 리터럴 등이 올 수 있지만, lvalue에는 저장공간(변수, 배열)만 올 수 있기 때문이다.
int i = 2;
0 = i + 1; // 에러. lvaule에는 리터럴 불가
i + 2 = i; // 에러. i+2 -> 2+2 -> 4는 리터럴
i = i + 3; // OK. i에 2+3 = 5가 저장됨
final int MAX = 200; // OK. 변수가 final을 만나 상수가 됨
MAX = 300; // 에러. 상수는 한 번 초기화 후 값을 바꿀 수 없음
대입 연산자는 다른 연산자를 하나 붙이면 복합 대입 연산자가 된다.
여기서 우변은 항상 단항일 필요는 없다. 사용 예시를 보자.
int i = 2, j = 3;
System.out.println(i *= 10 + j); // 26
// i = i * (10 + j)
i = 2, j = 3;
System.out.println(i *= (10 + j)); // 26
// 우변에 괄호가 없어도 결과는 같다.
i = 2, j = 3;
System.out.println(i += 10 * j); // 32
// i = i + (10 * j)
i = 2, j = 3;
System.out.println(i += (10 * j)); // 32
// 우변에 괄호가 없어도 결과는 같다.
'Java' 카테고리의 다른 글
제어문 (1) 조건문 - if, else if, else (0) | 2022.01.04 |
---|---|
제어문과 블록, 특별한 키워드 (0) | 2022.01.03 |
비교 연산과 논리 연산 (0) | 2021.12.31 |
산술 연산자와 산술 변환 (0) | 2021.12.31 |
형변환(type casting) (0) | 2021.12.29 |