Java - Scope

CYSSSSSSSSS·2024년 2월 11일
0

자바

목록 보기
5/26

Scope

Scope

지역 변수와 스코프

  • 변수는 선언 위치에 따라 지역변수와 멤버변수와 같이 구분된다.
  • 지역변수는 코드 블록을 기준으로 안에 있는 변수들을 지역변수 라고 한다.
  • 코드 블럭을 벗어나면 제거된다.
package scope;

public class Scope1 {
    public static void main(String[] args) {
        int m = 10; // m은 psvm 안에서 생존하는 변수
        if (true){
            int x = 20; // if 안에 있는 블록에서만 적용
            System.out.println("if m = " + m); // if 가 psvm 안에 있기 때문에 if 안에서도 변수 값을 확인 할 수 있다.
            System.out.println("if x = " + x); // if 안에 있기 때문에 지역변수로 사용 가능
        }
        // x는 if 밖에서는 사용 불가능 하다
        //System.out.println("x = " + x); // if 안에 선언했기 때문에 에러가 난다.
        System.out.println("m = " + m);
    }
}
  • m은 main안 코드 블록에서 선언되었다. 변수 선언부터 블록이 종료될 때 까지 생존한다.
  • 반면 x는 if문 안에서 선언되었기 때문에 if문 블록 안에서만 사용하고 if문 밖에서는 사용 할 수 없다.
package scope;

public class Scope2 {
    public static void main(String[] args) {
        int m = 10;
        for (int i=0; i<2; i++){
            System.out.println("for m = " + m); // main 안에 지역변수
            System.out.println("for i =" + i);  //for 문안 지역변수
        } // i는 외부에서는 사용 불가능하다.
        System.out.println("main m = " + m); // main 안에 변수라 접근 가능
        //System.out.println("main i = " + i); // i는 접근 불가
    }
}

스코프가 필요한 이유

package scope;

public class Scope3_1 {
    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);
    }
}
  • 조건이 맞으면 m의 값을 2배 증가해서 출력하는 코드이다.
  • 변수 temp를 사용하는 코드는 좋은 코드라고 보기 어렵다.

비효율적인 메모리 사용

  • temp는 if안에서만 코드 블록에서만 필요하지만 main에서 선언해버리면 main이 종료될때까지 메모리 낭비가 발생한다.
    코드 복잡성 증가
  • temp는 main에서만 선언되어있기 때문에 main이 종료될때 까지 값의 변화에 민감해야한다.
  • 유지보수가 어려워지고 코드가 매우 복잡해진다.
package scope;

public class Scope3_2 {
    public static void main(String[] args) {
        int m = 10;
        if (m > 0){
            int temp = m * 2;
            System.out.println("temp = " + temp);
        } // if가 끝나면 temp의 사용을 줄여줄수 있다.
        //System.out.println("temp = " + temp);
        System.out.println("m = " + m);
    }
}

while vs for 스코프 관점

package loop;

public class While2_3 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        int endnum = 3;

        // i가 endnum 보다 작거나 같을때만 사용한다.
        while (i <= endnum){
            sum = sum + i;
            System.out.println("i=" + i + " sum=" + sum);
            i++;
        }


    }
}
package loop;

public class For2 {
    public static void main(String[] args) {
        int sum = 0;
        int endNum = 3;

        // 더하기 1 + 2 +3
        for (int i=1;i<=endNum;i++){
            sum += i;
        }
        System.out.println("누적합 : " + sum);


    }
}
  • while문은 i변수의 스코프가 main 메서드 전체가 된다. 반면에 for문의 경우 변수 i의 스코프가 for문 안으로 한정된다.
  • for문 같은 경우 블록 안에서만 i가 한정되기 때문에 스코프의 범위를 제한하는 것이 메모리 사용과 유지보수 관점에서 더 좋다.
profile
개발자 되고 싶어요

0개의 댓글

관련 채용 정보