반응형
package org.opentutorials.javatutorials.scope;
public class ScopeDemo2 {
// 이와 같이 클래스 전체에 걸쳐 영향을 미치는 변수를 전역변수라 한다.
static int i;
static void a() {
// 여기를 int i = 0; 이라고 선언해주면 문제없이 진행된다.
// 이 메소드가 실행이 끝나고나면, a()에 할당된 메모리에서 데이터가 삭제되며
// 위의 전역변수 i와는 전혀 다른 뜻이 되기 때문.
i = 0;
}
// 이 경우 i는 전역변수로 설정되어 있기 때문에
// a()는 for문의 매개변수인 i에 의해서 0을 무한반복 출력하게 된다.
public static void main(String[] args) {
// 여기까지는 i 가 0으로 유지되고 있다.
// 여기를 int i = 0; 이라고 선언해주면 문제없이 진행된다.
// int i = 0; for문의 {} 안에서만 유효한 지역변수가 되기 때문이다.
// 변수를 만든다는 것은 그것의 유효범위를 지정해주는 일이기도 하다.
for (i = 0; i < 5; i++) {
// 여기에서부터는 상위 메소드인 static void a()
// 가 작동하면서 계속해서 a();는 i = 0출력하게 되는 것이다.
a();
System.out.println(i);
}
}
}
// 요약하여, {} 전역변수, 지역변수다 하지만, {} 라는 중괄호 사이에서만
// 선언한 변수가 유효함을 알 수 있다.
package org.opentutorials.javatutorials.scope;
class C {
// 지역변수가 없을 때는 전역변수를 사용하지만
// 지역변수가 있을 때는 지역변수가 전역변수를 우선한다.
int v = 10;
void m() {
int v = 30;
System.out.println(v); // 여기는 지역변수
System.out.println(this.v); // 여기는 전역변수
}
}
package org.opentutorials.javatutorials.scope;
public class ScopeDemo7 {
public static void main(String[] args) {
C c1 = new C();
c1.m();
}
}
package org.opentutorials.javatutorials.classinstance;
class Calculator {
static double PI = 3.14;
int left, right;
// 이전에 클래스와 인스턴스에서 봤던 예제 코드이다.
// 지역변수를 우선하는 원칙 때문에
//left와 right를 파라미터값으로 정했을 때 아래 코드에는
// 파라미터 값이 들어가게 되고, 이로 인해,
// 지역변수와 전역변수를 구분하기 위해서 아래와 같이 this메소드를 사용하였지만
// this.left = left;
// this.right = right;
// 아래와 같이 언더바를 더해 기존 전역변수 이름과 다르게 설정한 뒤
public void setOprands(int _left, int _right) {
// 이와 같이 this를 사용하지 않고도 바로 전역변수로 사용할 수 있게 된다.
left = _left;
right = _right;
}
public void sum() {
System.out.println(this.left + this.right);
}
public void avg() {
System.out.println((this.left + this.right) / 2);
}
}
절차지향 프로그램처럼 객체도 크기가 커지면 관리의 이슈가 생겨난다.
그래서 객체지향 프로그램일지라도 가급적이면 전역변수의 사용을 자제하는 형태로 프로그램을 작성하는 것이 좋고, 동시에 단일 객체가 너무 비대해지지 않도록 적절하게 규모를 쪼개는 것도 중요하다.
반응형
'Programming > Java' 카테고리의 다른 글
extends 상속 (0) | 2022.01.29 |
---|---|
자바 생성자 (0) | 2022.01.29 |
객체지향의 의의 - 중복없애기 (0) | 2022.01.29 |
자바 입력과 출력 스캐너 scanner 사용법 (0) | 2022.01.29 |
자바 입출력 (0) | 2022.01.29 |