유효범위란?
변수를 전역변수와 지역변수로 나눠서 좀 더 관리하기 편리하도록 한 것 이다.
아래 코드에서 a 메소드 또는 for 문 안에 있는 i를 int i로 선언하게 되면 무한루프에 빠지는 현상을 해결할 수 있다.
아래 ScopeDemo4 클래스에서 10번 째 줄 코드가 오류가 나는 이유는 title 이라는 변수가 a 라는 메소드에서만 사용되는 지역변수로만 선언이 되어있고 전역변수로 선언된 title 변수가 없기 때문이다.
만약, for문이 있는데 for문 안에서 int i를 선언하지 않고 'for( i = 0; i < 5; i++)' 이런식으로 선언했다면 전역변수가 무조건적으로 있어야 한다.
아래 ScopeDemo6 클래스를 실행하면, 결과는 5가 나온다.
그 이유는 a 메소드는 a 메소드에서 사용하는 지역변수 i를 10으로 선언하고 b 메소드를 호출한다.
b 메소드를 보면 i를 출력하라고 선언하였는데 b 메소드 안에서 선언된 지역변수가 없기때문에 자연스럽게 전역변수(static int i =5)의 값을 가져오게 된다.
b의 유효범위는 자기 자신이거나 전역변수 둘 중에 하나만 접근할 수 있다. -> 정적인 유효범위(static scope)
아래 ScopeDemo7 클래스를 보면,
C, C2, C3 클래스를 생성하고 생성자를 통해서 c1, c2, c3를 선언하여 각 C 클래스 안에 있는 m 메소드를 호출하고 있다.
c1은 m 메소드가 class C에서 선언한 v 변수의 값(10)을 가지고 와서 출력 결과는 10이 된다.
c2는 m 메소드 내에 선언된 지역변수 v의 값(20)을 가지고 와서 출력 결과는 20이 된다.
c3는 m 메소드가 class C에서 선언한 v 변수의 값(10)을 가지고 와서 출력 결과는 10이 된다.
왜냐하면 this를 사용하여 전역변수를 가져왔기 때문이다.
this 내용을 정리한 URL : https://yelin1217.tistory.com/46
[Java] this
this : 메소드에서 현재 인스턴스를 가리키는 역할을 한다. class Person { private String name; public Person(String pName) { name = pName; } public void sayHello() { System.out.println("Hi. My name is..
yelin1217.tistory.com
'TIL > Java' 카테고리의 다른 글
[Java] 상속과 생성자 (0) | 2022.01.18 |
---|---|
[Java] 상속(Inheritance) (0) | 2022.01.18 |
[Java] 클래스 멤버와 인스턴스 멤버: 타입별 비교 (0) | 2022.01.17 |
[Java] 연속적으로 값을 입력하기 / 파일 가져오기 (Scanner + While + File) (0) | 2022.01.15 |
[Java] main (0) | 2022.01.14 |