Java : 지역 변수와 스코프

커비·2024년 11월 1일
0

Java

목록 보기
20/55
post-thumbnail

📌 지역 변수

  • 이름 그대로 특정 지역에서만 사용할 수 있는 변수
  • 특정 지역을 벗어나면 사용할 수 없다.
  • 자신이 선언된 코드블록 {} 안에서만 생존하고, 자신이 선언된 코드를 벗어나면 제거되기 때문에 이후에는 접근할 수 없음

📎 특정 지역이란?

  • 지역이 바로 변수가 선언된 코드블록 {} 을 의미함

📌 스코프(scope) if문 예제 코드

public class Scope1 {
    public static void main(String[] args) {
        // m 생존 시작
        int m = 10;

        if (true) {
            // x 생존 시작
            int x = 20;

            // 블록 내부에서 블록 외부는 접근 가능
            System.out.println("if m = " + m);
            System.out.println("if x = " + x);
        } // x 생존 종료

        // 오류, 변수 x에 접근 불가
        // System.out.println("if x = " + x);
        System.out.println("if m = " + m);
    } // m 생존 종료
}

📎 m의 생존 범위

int mmain{} 전체에서 접근할 수 있기 때문에 스코프가 넓다.
m 이 선언된 코드블록 안에서만 생존이 가능하기 때문에 4번줄에서 20번줄에서만 생존이 가능함

📎 x의 생존 범위

int xif{} 코드 블록 안에서만 접근할 수 있게 때문에 스코프가 짧다.


📌 스코프(scope)

  • 변수의 접근 가능한 범위를 스코프(scope)라고 한다.
  • scope : 범위

📌 스코프(scope) for문 예제 코드

public class Scope2 {
    public static void main(String[] args) {
        int m = 10;

        // 블록 내부, for문 내
        for (int i = 0; i < 2; i++) {
            // 블록 내부에서 외부는 접근 가능
            System.out.println("for m = " + m);
            System.out.println("for i = " + i);
        } // i 생존 종료

        // 오류, i에 접근 불가
        // System.out.println("main i = " + i);
        System.out.println("main m = " + m);
    } // m 생존 종료
}

📎 i의 생존이 종료했을 때 i를 출력하는 코드를 입력할 경우 예시


📌 스코프(scope) 존재의 이유

  • 메모리를 효율적으로 사용하고 유지보수하기 더 좋은 코드를 만들 수 있다.

간단한 예시 코드

public class Scope3 {
    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배 증가해 출력하는 코드
  • 2배 증가한 값을 저장해두기 위해 임시 변수 temp를 사용
  • 임시 변수 tempif 조건이 만족할 때 임시로 잠깐 사용하는 변수인데 임시 변수 temp main() 코드 들럭에 선언되어있기에 좋은 코드라고 볼 수 없다.

📎 예시코드가 좋은 코드가 아닌 이유

비효율적인 메모리 사용

  • tempif 코드 블록에서만 필요하지만 main() 코드 블록이 종료될 때까지 메모리에 유지되기에 불필요한 메모리가 낭비된다.
  • 만약 if 코드 블록 안에 temp 를 선언했다면 Java를 구현하는 곳에서 if 코드 블록의 종료 시점에 이 변수를 메모리에서 제거해 더 효율적으로 메모리를 사용할 수 있다.

코드의 복잡성 증가

  • 좋은 코드는 군더더기 없는 단순한 코드이다.
  • 스코프가 불필요하게 넓음 : 현재 코드는 if 코드 블록이 끝나도 maim() 어디서나 temp 를 여전히 접근할 수 있다. 누군가 이 코드를 유지보수 할 때 m은 물론, temp까지 계속 신경써야한다.
  • tempif 코드 블록에서만 필요하고 그 안에서만 사용하면 된다. if 코드 블록 안에 temp 를 선언했다면 if 가 끝나고 나면 temp 를 전혀 생각하지 않아도 된다. (변수를 하나 줄일 수있다)

💡 좋은 코드로 변경한 예

  • temp 를 코드 블록 안에서 선언하는 것으로 변경
  • tmepif 코드 블록 안으로 스코프 범위가 줄어들게 됨
  • temp 메모리를 빠르게 제거해 메모리를 효율적으로 사용하고 temp 변수를 생각해야하는 범위를 줄여 유지보수하기 좋은 코드로 변경됨
public class Scope3 {
    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);
    }
}

🔥 한줄 요약

좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라 적절한 제약이 있는 프로그램이다.

profile
전공은 컴퓨터공학, 복수전공은 해킹보안학, 직장은 방학(파워 구직중)

0개의 댓글