[Java의 정석]Chapter3.연산자(07~09)

Chapter 3. 연산자

07. 형변환 연산자

  • 다른 타입간의 연산을 수행하는 경우 수행 전 타입을 일치시켜야 함
  • 형변환 : 변수나 리터럴(상수)의 타입을 다른 타입으로 변환하는 것
  • 형변환 방법 : 형변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여줌 ▶ (타입)피연산자
  • 괄호()는 '캐스트 연산자' 또는 '형변환 연산자'라고 하며, 형변환을 '캐스팅(casting)'이라고도 함.
ex)
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.6f1
int→float(float)1010.0f

08. 자동 형변환

  • 경우에 따라 편의상의 이유로 형변환 생략 가능
  • 그렇다고 형변환이 이루어지지 않는 것은 아니고, 컴파일러가 생략된 형변환을 자동적으로 추가해줌

🍕 float f = 1234; //OK float f = (float)1234;에서 (float)가 생략. 에러 없음

🍕 byte b = 1000; //에러 byte타입의 범위(-128~127)를 벗어난 값의 대입

▶변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우 형변환을 생략하면 에러 발생

▶에러메시지incompatible types:possible lossy conversion from int to byte : 큰 타입에서 작은 타입으로의 형변환은 값 손실이 발생할 수 있다는 뜻

🍕 byte b = (byte)1000; //OK 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨

큰 타입에서 작은 타입으로 명시적인 형변환 해줬을 경우, 형변환이 프로그래머의 의도적인 것으로 간주하여 컴파일러는 에러를 발생시키지 않음

🚩 형변환을 생략하면 컴파일러가 자동적으로 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다

✅형변환이 가능한 7개의 기본형을 왼쪽부터 오른쪽으로 표현할 수 있는 값의 범위가 작은 것부터 큰 것의 순서로 나열
✅왼쪽에서 오른쪽으로의 변환은 형변환 연산자를 사용하지 않아도 자동 형변환되며, 반대 방향으로의 변환은 반드시 형변환 연산자 입력 필수

09. 사칙 연산자

  • 사칙 연산자 : 덧셈+ 뺄셈 - 곱셉* 나눗셈/ 그리고, 나머지%
  • 곱셉* 나눗셈/ 나머지% 연산자가 덧셈+ 뺄셈 - 연산자보다 우선순위가 높으므로 먼저 처리
  • 피연산자가 정수인 경우, 나누는 수로 0 사용 불가. 실행시 에러 발생
  • 10을 4로 나눈 결과가 2 : 나누기 연산자두 피연산자가 모두 int타입인 경우 연산결과 역시 int타입. 따라서 소수점 이하는 버려지며, 반올림이 발생하지 않음
  • 올바른 연산결과를 얻기 위해 두 피연산자 중 한 쪽을 실수형으로 형변환 필요. 그래야 다른 한쪽도 같이 실수형으로 자동 형변환 되어 실수형의 값의 결과를 얻음

좋은 웹페이지 즐겨찾기