Blog

스코프, 형변환

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이 종료 될 때 까지 메모리에 남아 있게 된다.
  1. temp의 경우 if문 내부에서만 사용 되지만 if문 블럭이 시작하기 전부터 종료된 이후에도 메모리에 남아 메모리가 낭비 된다.
  2. 유지 보수 시에 temp가 if문 내부에서만 사용 될 경우 if문 탈출 후에는 해당 변수에 대해 고려하지 않아도 된다.
  3. 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) {
	
	}
}