자바의 정석_기초편 Chapter 3 中 [1 ~ 8] (230728, 금)
3-1. 연산자와 피연산자.
연산자 : 연산을 수행하는 기호.
(EX. + : 덧셈 연산 수행, 덧셈 연산자 라고 부름)
x + 3 에서 'x' 와 '3' 은 피연산자, '+' 는 연산자 이다.
y = 4 * x + 3; // x의 값이 5라면, y의 값은 23이 된다.
System.out.prinln(y) // y의 값이 23이 화면에 출력된다.
System.out.println(4 * x + 3); // x의 값이 5라고 가정하면
System.out.println(23);
3-2. 연산자의 종류.
종류 | 연산자 | 설명 |
산술 연산자 | + - * / % << >> | 사칙 연산과 나머지 연산 (%) |
비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || ! & | ^ ~ | '그리고(AND)'와 '또는(OR)' 으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 | (type) ?: instance of | 형변환 연산자, 삼항 연산자, instanceof연산자 |
&& : 그리고 (and)
|| : 또는 (or).
! : 반대의 의미.부정의 의미.
(type) : 형변환.
?: : 삼항 연산자.
3-3. 연산자의 우선순위
" 하나의 식(expression) 에 연산자가 둘 이상 있을 때, 어떤 연산을 먼저 수행할지를 자동 결정하는 것 "
식 | 설명 |
-x+3 | 단항 연산자가 이항 연산자보다 우선순위가 높음. x의 부호를 바꾼 다음 덧셈이 수행. 여기서 ' - ' 는 뺄셈 연산자가 아니라 부호 연산자이다. |
x + 3 * y | 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선순위가 높다. 그래서 '3 * y'가 먼저 계산된다. |
x + 3 > y - 2 | 비교 연산자(>) 보다 산술 연산자 ' + '와 ' - '가 먼저 수행. 그래서 'x + 3' 과 'y - 2' 가 먼저 계산된 다음 '>' 가 수행된다. |
x > 3 && x < 5 | 논리 연산자 '&&' 보다 비교 연산자가 먼저 수행. 그래서 'x > 3'와 'x < 5' 가 먼저 계산된 다음 '&&' 가 수행된다. 식의 의미는 'x가 3보다 크고 5보다 작다' 이다. |
result = x + y * 3; | 대입 연산자는 연산자 중에서 제일 우선순위가 낮다. 그래서 우변의 최종 연산결과가 변수 result에 저장된다. |
3-4. 연산자의 결합 규칙
" 대입과 단항 연산자를 제외하면, 모두 왼쪽 -> 오른쪽 방향이다. "
연산자의 우선순위와 결합법칙은 아래의 3가지만 기억!!
1. 산술 > 비교 > 논리 > 대입 순.
- 대입은 제일 마지막에 수행된다.
2. 단항(1) > 이항(2) > 삼항(3) 순.
- 단항 연산자의 우선순위가 이항 연산자보다 높다.
3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽이다.
3-5 : 증감연산자.
증가 연산자 (++) : 피연산자의 값을 1 증가 시킨다.
감소 연산자 (--) : 피연산자의 값을 1 감소 시킨다.
타입 | 설명 | 사용 예 |
전위형 | 값이 참조되기 전에 증가시킨다. | j = ++i; |
후위형 | 값이 참조된 후에 증가시킨다. | j = i++; |
피연산자의 왼쪽에 위치하면 ' 전위형 (prefix) '
피연산자의 오른쪽에 위치하면 ' 후위형 (postfix) '.
단, 증감연산자가 수식이나 메소드 호출에 포함되지 않고 독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후위형의 차이는 없다.
++i; // 전위형. i의 값을 1 증가시킨다.
i++; // 후위형. 위의 문장과 차이가 없다.
3-6. 부호연산자
부호 연산자 ' - ' 는 피연산자의 부호를 반대로 변경한 결과를 반환한다.
즉, 음수면 양수, 양수면 음수가 연산의 결과가 됨.
부호 연산자 ' + ' 는 하는 일이 없고, 쓰이는 경우도 드뭄.
부호 연산자는 boolean형, char형을 제외한 기본형에서만 사용 가능하다.
3-7 : 형변환 연산자
형변환이란??
변수 또는 상수의 타입을 다른 타입으로 변환하는 것.
(타입) 피연산자
(괄호) 는 '캐스트 연산자' 또는 '형변환 연산자' 라고 하며, 형변환을 '캐스팅(casting)' 이라고도 한다.
double d = 85.4;
int score = (int)d;
int score = (int)d; -> int score = (int)85.4; -> int score = 85;
이 과정에서 알 수 있듯이, 형변환 연산자는 타입을 변환한 그 결과값 반환이 끝이다.
변환 | 수식 | 결과 |
int -> char | (char)65 | 'A' |
char -> int | (int)'A' | 65 |
float -> int | (int)1.6f | 1 |
int -> float | (float)10 | 10.0f |
3-8. 자동 형변환.
float f = 1234; // float f = (float)1234; 에서 (float) 가 생략.
우변은 int 타입의 상수, 이 값을 저장하려는 변수의 타입은 float 이다.
서로 타입이 달라 형변환이 필요하지만 편의상 생략.
float 타입의 변수는 1234 라는 값을 저장하기에 문제가 없어서 가능.
그러나 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생.
byte b = 1000; // 에러 발생. byte타입의 범위 (-128 ~ 127)를 벗어난 값의 대입.
' incompatible types:possible lossy conversion from int to byte ' 라는 에러메세지가 뜬다.
큰 타입에서 작은 타입으로의 형변환은 값 손실이 발생할 수 있다는 뜻.
byte b = (byte)1000; // ok. 그러나 값 손실이 발생해서 변수 b에는 -24 가 저장됨.
형변환을 하는 이유는 주로 서론 다른 두 타입을 일치시키기 위해서인데, 형변환을 생략하면 컴파일러가 알아서 자동적으로 형변환을 한다.
>> 기존 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.
byte -> int 는 형변환 생략가능.
int -> byte 는 형변환 생략이 불가하다. 직접 형변환 해야함 : (byte)~~;
표현범위가 좁은 타입에서 넓은 타입으로 형변환 하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.
위 그림은 7개의 기본형*형변환가능 을 왼쪽부터 오른쪽으로 표현할 수 있는 값의 범위가 작은 것부터 큰 것의 순서로 나열한 것이다.
화살표 방향으로의 변환, 즉 좌측에서 우측으로의 변환은 자동 형변환이 가능, 그 반대방향은 반드시 형변환 연산자 사용.
230728 학습.
'진행중인 학습 > 자바의 정석_학습' 카테고리의 다른 글
자바의 정석_기초편 CHAPTER 3 中 [15 ~ 19] (230802) (0) | 2023.08.02 |
---|---|
자바의 정석_기초편 CHAPTER 3 中 [9 ~ 14] (230731) (0) | 2023.07.31 |
자바의 정석_기초편 CHAPTER 2 中 [10 ~ 17] (230726) (0) | 2023.07.26 |
자바의 정석_기초편 CHAPTER 2 中 [1 ~ 9] (230724) (0) | 2023.07.24 |
자바의 정석_기초편 CHAPTER 1 (230721) (0) | 2023.07.21 |