변수 스코프
변수의 생존 범위는 { }로 따진다. 만약 { } 내부에서 변수가 선언되었다면 그 변수의 생존 범위는 { } 안까지다. { }밖은 생존 불가
참고) {1. {2. } } 1번에 생성된 변수는 2번 안에서 생존이 가능하지만 2번에서 생성된 변수는 1번에서 생존이 불가능하다.
왜냐? 변수의 생존 범위는 { }이기 때문이다.
public class Scope {
public static void main(String[] args) {
int m = 10; // m의 범위는 main 메서드 안까지
if (true) {
int x = 20; //x의 범위는 if문 안까지만 if문 나가는 순간 생존x
System.out.println("m = " + m);
System.out.println("x = " + x);
}
for (int i = 0; i <= 2; i++) {
System.out.println("m = " + m);
System.out.println("i = " + i);
}
}
}
그래서 변수 m의 경우 main 메서드 { }안에서 활동이 가능하고, 변수 x의 경우 if{ } 안에서만 활동 가능,
변수 i 같은 경우 { } 밖에서 선언했는데 왜 for { } 안에서만 생존 할 수 있지? 라고 생각이 들거다. for (int i = 0; ...)에서 초기식으로 선언하면 for문 안에서만 사용가능하다. 예외니깐 기억해두자!
형(타입)변환
작은 범위의 데이터 타입에서 큰 범위의 데이터 타입으로 값을 넣는 건 자동으로 처리되지만,
int -> double -> long 은 가능!
큰 범위에서 작은 범위로 값을 넣으려면 오류가 날 수 있다.
int <- double <- long 가능은 하지만 심각한 문제가 발생할 수 있다!
예를 들어, int에서 double, double에서 long으로 변환하는 건 문제가 없지만, long에서 double이나 double에서 int로 변환할 때는
데이터 손실이 있을 수 있어서 조심해야 한다!
또, int에서 long으로 변환하는 건 가능하다고 했는데, 사실 다른 범위에 값을 넣으려면 타입을 맞춰야한다!. 하지만 Java는 이런 변환을 자동으로 해주는데, 이를 캐스팅(casting)이라고 부른다. Java에서는 타입을 맞추는 게 중요하기 때문에 이런 자동 형 변환이 있을 때도 타입 일관성을 지키는 게 필요하다.
그럼 큰 범위에서 작은 범위로 넣으려면 어떻게 해야될까? 바로 명시적으로 형변환 해주는 것이다.
int valueInt;
double valueDouble = 1.5;
valueInt = (double) valueDouble
// 결과 : valueInt = 1
이렇게 double형을 int형으로 바꿀 때 "(대입하려는 타입)"을 명시적으로 적어주면서 형변환을 하면 가능하다.
계산에서도 형변환이 적용된다. 이것만 기억하자!
1. 같은 타입끼리의 계산은 같은 타입의 결과가 나온다
int valueInt = 3 / 2; // int / int 이므로 int값이 도출된다.
double valueDouble = 3 / 2;
/*
뭔가 1.5가 도출될 것 같지만 아니다.
원칙을 그대로 수행하면 int / int 이므로 1이 나오고
double valueDouble = (double)1;
valueDouble = 1.0;
같은 int 타입끼리 계산되어 int형이 도출되고 자바가 double형으로 자동 형변환 해준 것.
*/
2. 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다. (명시적 형변환으로도 형변환이 일어나진다)
double valueDouble = 3.0 / 2 // double / int
double valueDouble = 3.0 / (double)2 // dobule이 더 큰 타입이니 int 2도 double로 자동 형변환
double valueDouble = 3.0 / 2.0 // double / double
double valueDouble = 1.5 // double'Back-End > JAVA' 카테고리의 다른 글
| 오버로딩과 this() (0) | 2024.11.16 |
|---|---|
| 기본형 변수와 참조형 변수 (0) | 2024.11.16 |
| Java의 객체 공유(의존성 주입) (2) | 2024.11.16 |
| ENUM (4) | 2024.11.15 |
| 배열 (0) | 2024.11.08 |