스코프
: 변수 영역
지역변수
: 자신이 선언된 블록 안에서만 사용 가능한 변수
public class Ex {
public static void main(String[] args) {
int m = 1;
if(true){
m = 2;
int n = 1;
}
n = 1;
}
}
이 코드는 오류가 있는 코드이다.
왜냐하면 int n
이 if문 안에서 선언되었기 때문에 if문 안에서만 사용 가능한 변수(if문에 속한 지역 변수)이기 때문이다.
그래서 if문 밖에서 변수 n을 사용하려고 했기 때문에 오류가 발생한 것!
그러나 int m
은 if문 밖에서 선언되었기 때문에 if문 내에서도 사용 가능하다. (생존 범위가 if문보다 크기 때문!)
스코프가 존재하는 이유는 뭘까
public class Scope1 {
public static void main(String[] args) {
int m = 10;
int temp = 0;
if(m > 0){
temp = m * 2;
System.out.println("temp = " + temp);
}
System.out.println("m = " + m);
}
}
위의 코드에서 변수 temp
는 if문 안에서만 쓰인다. 그런데 지금은 if문 밖에서 선언된 상태!
이렇게 된다면 메모리를 비효율적으로 사용하게 된다. main()에서도 temp
를 위한 메모리 공간을 유지해야 하기 때문에 불필요한 메모리가 낭비된다.
또한 if에서만 쓰면 if문 내에 변수를 사용하는 것이 보기에도 쉽다. 이렇게 무분별하게 아무데나 변수를 선언하면 코드 복잡성이 증가한다.
이 코드를 처음 보는 사람은 temp가 if문에서만 쓰이는 지 모르기 때문에 main()이 종료될 때까지 temp를 신경써야한다는 단점이 있다.
위의 코드는 스코프가 불필요하게 넓은 것의 예시이다.
이 코드를 적절한 스코프를 지정한 코드로 변경한다면
public class Scope1 {
public static void main(String[] args) {
int m = 10;
if(m > 0){
int temp = m * 2;
System.out.println("temp = " + temp);
}
System.out.println("m = " + m);
}
}
이렇게 바꾸면 if문 밖에서는 더 이상 temp를 사용할 수 없게 된다.
while문과 for문의 스코프
for문에서는 조건식에서 변수를 선언할 수 있는 반면, while은 while문 밖에서 변수를 선언해야 한다.
그런데 단순 카운트 변수이며 해당 반복문에서만 사용하는 변수라면 for문을 사용해서 변수를 선언하는 것이 스코프적으로나 메모리적으로나 효율적이다.
반복문 이외에도 사용하는 단순한 변수가 아니라면 while문, for문 원하는 것을 사용하면 된다.
- 변수는 꼭 필요한 범위로 한정해서 사용하는 것이 좋다. 변수의 스코프는 꼭 필요한 곳으로 한정해서 사용하자.
- 메모리를 효율적으로 사용하고 더 유지보수하기 좋은 코드를 만들 수 있다.
'Java를 자바' 카테고리의 다른 글
[Java] Scanner(사용자 입력받기) (0) | 2024.04.30 |
---|---|
[Java] 형변환 (0) | 2024.04.11 |
[Java] 반복문 | while, for (0) | 2024.04.11 |
[Java] 연산자 (0) | 2024.04.02 |
[Java] 변수 (0) | 2024.04.02 |