TIL/Java

[Java] 유효범위(Scope)

야리니 2022. 1. 17. 21:13
728x90
반응형

유효범위란?

변수를 전역변수와 지역변수로 나눠서 좀 더 관리하기 편리하도록 한 것 이다.

 

 

ScopeDemo.class

 

 

아래 코드에서 a 메소드 또는 for 문 안에 있는 i를 int i로 선언하게 되면 무한루프에 빠지는 현상을 해결할 수 있다.

 

ScopeDemo2.class

 

 

아래 ScopeDemo4 클래스에서 10번 째 줄 코드가 오류가 나는 이유는 title 이라는 변수가 a 라는 메소드에서만 사용되는 지역변수로만 선언이 되어있고 전역변수로 선언된 title 변수가 없기 때문이다.

만약, for문이 있는데 for문 안에서 int i를 선언하지 않고 'for( i = 0; i < 5; i++)' 이런식으로 선언했다면 전역변수가 무조건적으로 있어야 한다.

 

ScopeDemo4.class

 

 

아래 ScopeDemo6 클래스를 실행하면, 결과는 5가 나온다.

그 이유는 a 메소드는 a 메소드에서 사용하는 지역변수 i를 10으로 선언하고 b 메소드를 호출한다.

b 메소드를 보면 i를 출력하라고 선언하였는데 b 메소드 안에서 선언된 지역변수가 없기때문에 자연스럽게 전역변수(static int i =5)의 값을 가져오게 된다.


b의 유효범위는 자기 자신이거나 전역변수 둘 중에 하나만 접근할 수 있다. -> 정적인 유효범위(static scope)

 

ScopeDemo6.class

 

 

 

아래 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

ScopeDemo7

728x90
반응형