현 블로그는 모바일 환경이 아닌 PC환경에 최적화 되어있습니다.

 Mir의 운영환경

이번Chapter에서는  지역변수와 전역변수를 배워보자.

선언위치에 따른 변수의 종류

변수는 선언위치에 따라 전역변수와 지역변수로 나눠지는데
말그대로 전체에서 어디서든 호출하면 사용할수 있는 변수는 전역변수
특정한 구역({ })안에 생성되어 그 지역에만 사용할수 있는 변수는 지역변수라고 생각하면 된다.

class Ex6_5{

int iv;           //전역변수 : 같은클래스에서 호출이 가능하며

static int cv;    //다른 클래스에서도 호출이 가능하다.

void method()

{

int gv = 0; //지역변수 { }안에 생성되며 { }를 벗어나면

}                //자동으로 삭제되어 호출이 불가능하다.

}

 

이전 챕터에서 Method안에서 선언된 변수들은 다 지역변수로 메소드안에서만 사용할수 있는것이다.
(그래서 메소드는 결과값을 return으로 돌려주는것이다. 결과값을 돌려주지 않으면 변수와 같이 사라지게 된다.)
이외에도 for문에서 자주 사용하는 {for(int i; ....) } 에서의 i도 지역변수인것이다. 
 

class Hap {
    int hap;
  
   void
 addHap(int a, int b)
   {
        hap  =  a  + b;
   } 
자 위 예제를 보면 a와 b는 지역변수로 Method를 호출할때 생성되며
Method가 해야될 업무를 끝내고 종료되면 같이 사라지게 된다.

하지만 hap은 전역변수로 Method안에서 a와 b의 더한값을 저장한뒤에
Method가 종료되도 그 저장값을 가지고 남아 있게 되는것이다.

전역변수, 지역변수에 관한 문제는 SCJP자격증에서 기본적인 베이스로 나오기 때문에 꼭 숙지하기 바란다.
(필자도 문제를 많이 만들어 보겠다. 그런데 요즘 바빠서 문제를 만들시간이 별로 없다 ㅠㅠ)

전역변수는 객체변수
(인스턴스변수)와 클래스변수(static변수)로 나눠지게 되는데
객체변수는 클래스영역에서 선언되며 클래스의 객체를 생성할 때 만들어진다.

즉 객체화를 시켜서 호출해야지만 사용이 가능하다.

하지만 클래스변수(static변수)는 객체화를 시키지 않고도 사용이 가능하며
객체변수가 객체화 시킬때마다 서로 다른 저장공간을 가지는 반면
클래스변수는 여러번 객체화 시켜도 공통적인 저장공간을 가지게 된다.

아래 예제를 통해 자세히 알아보자.

class Card{

String kind;          //카드의 무늬 - 객체변수

int number; //카드의 숫자 - 객체변수

static int width = 100;     //카드의 너비 - 클래스변수

static int height = 250;    //카드의 높이 - 클래스변수

}


public class Ex6_4 {


public static void main(String[] args){

System.out.println("Card의 너비는 :"+ Card.width);

System.out.println("Card의 높이는 :"+ Card.height);

//이렇게 클래스 변수는 객체화를 시키지 않아도

//'클래스명.변수명'으로 직접사용이 가능하다.

Card c1 = new Card();

c1.kind = "Heart";

c1.number = 7;

//kind와 number는 객체변수이므로 Card클래스를 객체화

//시켜야지만 '클래스명.변수명'으로 사용이 가능하다.

Card c2 = new Card();

c2.kind = "Spade";

c2.number = 4;

//객체변수는 객체화를 시킬때마다 서로 다른 저장공간을 가지게된다.

System.out.println("c1카드는"+c1.kind+" "+c1.number+"번이며," +

           " 크기는 ("+c1.width +"," + c1.height+")이다.");

System.out.println("c2카드는"+c2.kind+" "+c2.number+"번이며," +

                 " 크기는 ("+c2.width +"," + c2.height+")이다.");

//위 print구문을 출력하면

//c1카드는 Heart 7번이며, 크기는(100,250)이다.

//c2카드는 Spard 4번이며, 크기는(100,250)이다.

//로 출력된다.

c1.width = 200;

c1.height = 300;

//c1의 width와 height를 각각 200과 300으로 초기화 시켰다.

System.out.println("c1카드는"+c1.kind+" "+c1.number+"번이며," +

" 크기는 ("+c1.width +"," + c1.height+")이다.");

System.out.println("c2카드는"+c2.kind+" "+c2.number+"번이며," +

" 크기는 ("+c2.width +"," + c2.height+")이다.");

//c1의 width와 height를 변경했기때문에 위 프린트 구문에서

//c1의 높이와 너비만 바뀔거 같지만 실제로 출력하면

//c1카드는 Heart 7번이며, 크기는(200,300)이다.

//c2카드는 Spard 4번이며, 크기는(200,300)이다.

//처럼 c2의 높이와 너비도 변경된다. 

}

}


위와같이 클래스변수는 각각의 저장공간이 아닌 하나의 저장공간으로 활용하기 때문에
공통적인 속성을 유지해야할경우 사용하는게 좋다.


간단히 지역변수와 전역변수에 대해 알아보았다.
자 그럼 다음챕터에서 지역변수와 전역변수가 왜 생겨나는지 알아보도록 하겠다.


 









 

+ Recent posts