PS/Java

[ JAVA ] 기본 문법 - 스코프(변수의 접근 가능한 범위), 형변환

HUIcode 2024. 10. 19. 20:17

 

지역변수와 스코프

: 변수는 선언한 위치에 따라 아래처럼 분류됨

  • 지역변수 : 특정 지역(코드블록{})에서만 사용할 수 있는 변수로 그 지역을 벗어나면 사용할 수 없음
  • 멤버변수 (클래스, 인스턴스)

scope

변수는 선언한 시점부터 해당 코드 블록이 종료될 때 까지 생존한다. 따라서 if{} 블록 내부에서도 외부 블록에서 선언된 m에 접근할 수 있다.

스코프(Scope) : 변수의 접근 가능한 범위

- 효율적인 메모리 사용

- 코드 단순화


형변환 (캐스팅/Casting)

: 작은 범위에서 큰 범위로는 값을 넣을 수 있음

ex ) int -> long -> double

자바에서 숫자를 표현할 수 있는 범위는 int < long < double로 double이 셋 중에서 가장 큰 범위를 표현할 수 있다.

: 큰 범위에서 작은 범위는 소수점 버림, 오버플로우 등의 문제가 발생할 수 있음

 

1. 자동 형변환 (묵시적 형변환)

: 작은 범위 숫자 타입에서 큰 범위 숫자 타입으로의 대입은 개발자가 직접 형변환을 하지 않아도 됨. 이런 과정은 자동으로 일어남

int intValue = 10;
long longValue;
double doubleValue;

longValue = intValue; // int->long 묵시적 형변환이 일어남
System.out.println("longValue = "+longValue); // longValue = 10;

doubleValue = intValue;
System.out.println("doubleValue = "+doubleValue); // doubleValue=10.0

 

2. 명시적 형변환

: 큰 범위에서 작은 범위로의 대입은 명시적 형변환이 필요함

: 변경하고 싶은 데이터 타입을 (int)와 같이 괄호를 사용해서 명시적으로 입력하면 됨.

 

ex. double 1.5를 int에 대입하면?

double doubleValue = 1.5;
int intValue = 0;

intValue = doubleValue; //컴파일 오류 발생
intValue = (int) doubleValue; //형변환
System.out.println(intValue); //출력:1

 

 

int 형은 double형보다 숫자의 표현 범위가 작다. 그리고 실수를 표현할 수도 없다. 따라서 이 경우 숫자가 손실되는 문제가 발생할 수 있다. 쉽게 이야기 해서, 큰 컵에 담긴 물을 작은 컵에 옮겨 담으려고 하니 손실이 발생할 수 있다는 것이다. 이런 문제는 매우 큰 버그를 유발할 수 있다. 예를 들어서 은행 프로그램이 고객에게 은행 이자를 계산해서 입금해야 하는데 만약 이런 코드가 아무런 오류 없이 수행된다면 큰 문제를 유발할 수 있다. 그래서 자바는 이런 경우 컴파일 오류를 발생시킨다. 컴파일 오류는 문제를 가장 빨리 발견할 수 있는 좋은 오류이다.

 

그럼에도 불구하고 이런 위험을 개발자가 직접 감수하고도 값을 대입하고 싶다면 데이터 타입을 강제로 변경할 수 있따.