스코프, 형변환
Scope 스코프 #
- 변수의 접근 가능한 범위
스코프를 사용 하는 이유
public class Main {
public static void main(String[] args) {
int m = 0;
int temp = 0;
if (m > 0) {
temp = m * 2;
System.out.println(temp);
}
System.out.println(m);
}
}
- 변수 m과 temp는 main이 호출 되었을 때 부터 main이 종료 될 때 까지 메모리에 남아 있게 된다.
- temp의 경우 if문 내부에서만 사용 되지만 if문 블럭이 시작하기 전부터 종료된 이후에도 메모리에 남아 메모리가 낭비 된다.
- 유지 보수 시에 temp가 if문 내부에서만 사용 될 경우 if문 탈출 후에는 해당 변수에 대해 고려하지 않아도 된다.
- if문 외부에서 temp에 접근 할 수 있기 때문에 코드가 의도대로 실행 되지 않을 수 있다.
Casting 형변환 #
자동 형변환 (묵시적 형변환)
public class Main {
public static void main(String[] args) {
int intValue = 10;
double doubleValue = (double)intValue; //형변환
double doubleValue2 = (double)10; //형변환
}
}
- 같은 타입 일 때, 큰 범위(double, float)변수에 작은범위(int)값을 대입 시 개발자가 직접 형변환 하지 않아도 자동으로 일어난다.
명시적 형변환
public class Main {
public static void main(String[] args) {
double doubleValue = 1.5;
//int intValue = doubleValue; //컴파일 오류 발생
int intValue = (int) doubleValue; //형변환
System.out.println(intValue); //출력값 : 1
}
}
- 작은 범위 변수에 큰 범위 값을 대입하려 하면 컴파일 오류가 발생 한다.
- 작은 범위에 담을 수 없는 큰 데이터가 들어간다면 손실이 발생 할 수 있기 때문에 오류를 발생 시킨다.
- 손실을 감수 하더라도 타입을 변경 하고 싶을 경우 (타입)을 통해 강제적으로 형 변환 할 수 있다.
형변환과 오버플로우
public class Main {
public static void main(String[] args) {
}
}