ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 17- 생활코딩 자바강의 정리(유효범위)
    TIL 2023. 1. 31. 22:39

     [목차]

    1. 유효범위란?
    2. 전역변수, 지역변수
    3. this

    유효범위란

    • 변수와 메소드 같은 것들을 사용할 수 있는 것은 이름이 있기 떄문입니다. 
    • left는 변수의 이름이고, sum은 메소드 이름입니다.
    • 프로그램이 커지면 여러 이유로 충돌하기 되는데 이를 해결하기 위해 만들어진 것이 유효범위라는 개념입니다.
      이 개념을 스코프라고 부릅니다.
    int left;
    public void sum() {}
    public class ScopeDemo {
    // a라는 메소드를 호출할 때 마다 i의 값이 0으로 세팅됨	
    // a라는 메소드 안에서 변수를 선언하게 되면 그 변수는 메소드 안에서만 사용할 수 있는 변수가 됩니다.
    // 그러한 범위를 유효범위라고 합니다.
        static void a() {
        // int i = 0; 이라는 변수는 a라는 메소드 안에 선언되어 있기 때문에 
        // int i = 0; 이라는 변수는 a메소드 밖에서는 영향을 미치지 않습니다.
        	int i = 0;
        }
        public static void main(String[] args) {
        // i가 0부터 5보다 작을 떄까지 반복합니다.
        	for (int i = 0; i < 5; i++) {
        // 0으로 초기화
            	a();
        // 0 1 2 3 4가 세로로 출력됩니다.
                System.out.println(i);
            }
        }
    }

    전역변수, 지역변수

    // 변수 i가 메소드 a에 소속된 변수라는 의미입니다.
    // 이 변수의 값을 어떻게 바꿔도 이 변수의 밖에는 영향을 주지 않습니다.
    // 지역변수
    static void a() {
    	int i = 5;
    }

     

    public class ScopeDemo 2 {
        // 어디에 속해있는 변수가 아닌 class에 속해 있는 변수를 전역변수 라고 합니다.
        // i라고 하는 변수를 메소드 밖에 for문 밖에 class 영역에 선언해 줬습니다.
        /*
        	전역 변수 i라는 값과는 전혀 무관한 값이 됨
        */
        static int i;
        static void a() {
        /* 
        	int i = 0; 이라고 하면 결과값 0 1 2 3 4를 세로로 출력함
        	이유: i의 값을 0 이라고 바꾸고 있는데 i의 데이터 타입을 int 라고 지정 했을 때 
        	int i = 0은 a메소드 안에서만 사용할 수 있게 되기 i를 사용하려고 했던 메모리가 삭제 됩니다. 
        */
        // 이 i의 값은 전역변수의 i를 사용하고 있습니다.
        	i = 0;
        }
        
        public static void main(String[] args) {
        // for문도 i의 값을 선언하지 않고 할당만 했습니다.
        	for (i = 0; i < 5; i++) {
            // i가 1이 되고 a라는 메소드를 호출해서 i의 값이 0이 됩니다.
            	a();
                // 결과값: 0이 무한반복
                System.out.println(i);
            }
        }
    }

    this

    • 인스턴스 자신을 의미하는 것을 this라고 합니다.
      ex) 인스턴스 C c1 = new C(); 인스턴스를 의미하기 때문에 10 출력
    • this 가 붙게 되면 그 객체에 대한 전역의 의미를 갖게 됩니다.
              
    class C {
    
    	int v = 10;
        
        void m() {
        // 지역변수가 우선순위가 더 높기 때문에 20이 출력됩니다.
        	int v = 20;
        	System.out.println(v);
        }
    }
    
    public class ScopeDemo7 {
    	public static void main(String[] args) {
         	// C라고 하는 클래스를 c1이라는 인스턴스에 담습니다.
        	C c1 = new C();
            c1.m();
        }
    }
    class C {
    	int v = 10;
        
        void m() {
        // 지역변수가 우선순위가 더 높기 때문에 20이 출력됩니다.
        	int v = 20;
            // 지역변수 20을 출력
        	System.out.println(v);
            // 전역변수 10을 출력
            System.out.println(this.v);
        }
    }
    
    public class ScopeDemo7 {
    	public static void main(String[] args) {
         	// C라고 하는 클래스를 c1이라는 인스턴스에 담습니다.
        	C c1 = new C();
            c1.m();
        }
    }

     

Designed by Tistory.