객체

반응형

전역변수(Global variable) 지역변수(Local variables)

 

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

 

변수는 선언위치에 따라 전역변수지역변수로 나눠지는데

선언위치에 따라

선언위치에 따라 

기억!!

 

말그대로 전체에서 어디서든 호출하면 사용할수 있는 변수는 전역변수

특정한 구역({ })안에 생성되어 그 지역에만 사용할수 있는 변수는 지역변수라고 생각하면 된다.

 

바로 예시

class Ex_variables{

int global_int;           // 전역변수(객체변수) : 같은클래스에서 호출이 가능

static int global_statuc_int; // 전역변수(클래스변수) : 다른 클래스에서도 호출이 가능

void method()

{

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

}                //method() 라는 메소드가 끝나는 시점에 바로 삭제

}

 

예시2

class Ex_variables2 {

    int global_v;

   void addmethod(int a, int b)
   {
        global_v  =  a  + b;
   } 

} 

1. addmethod 실행 내용

a+b 값이 global_v (전역변수) 변수에 들어간다.

2 .addmethod 실행 끝과 동시에 a,b 지역변수 사망

3 .global_v 전역변수이기때문에 값이 살아있음.(a+b 더한 )

 

하지만 전역변수도 종류가 있다.

1.객체변수 == 인스턴스 변수

객체변수는 클래스영역에서 선언되며 클래스의 객체를 생성할 때 만들어진다.

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

 

2.클래스변수 == static 변수

객체화를 시키지 않고도 사용이 가능하며

객체변수가 객체화 시킬때마다 서로 다른 저장공간을 가지는 반면

클래스변수는 여러번 객체화 시켜도 공통적인 저장공간을 가지게 된다.

 

여기서 서로 다른 공간이란 객체가 만들어지면서 새로운 해쉬값을 가지게 되는데 그것을 칭하는

클래스 변수는 같은 해쉬값 놀이터에서 놀고,

객체 변수는 새로운 해쉬값 놀이터를 계속 만들어 논다.

 

문법

객체변수

자료형 변수이름;

int localVar = 1;
String localVarstr = "local";

 

클래스 변수

static 자료형 변수이름;

static int localVar = 1;
static String localVarstr = "local";

예시3

class Card {

String kind;           

int number;

static int width = 200;  

static int height = 300;    

}

설명

객체 변수
String kind;
int number;


클래스변수
static int width = 200;    
static int height = 300; 

전역변수 설명의 영원한 친구 카드 클래스…

public class Ex_variables3 { 

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; 

Card c2 = new Card(); 
c2.kind = "Spade"; 
c2.number = 4; 

c1.width = 250; 
c1.height = 350; 

} 
}

설명

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

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

static 붙음 클래스 변수는 클래스명.변수명으로 직접 호출(사용) 가능

해쉬값 동일

 

Card c1 = new Card();

c1.kind = "Heart";

c1.number = 7;

 

객체 생성(이때 다른 해쉬값을 가진다는거)

객체 생성 클래스명.변수명으로 객체변수를 다룸

궁금한 사람 c1.hashCode(); c2.hashCode();

c1.kind = "Heart"; c1 객체만의 kind 값이 되는것.

 

Card c2 = new Card();

c2.kind = "Spade";

c2.number = 4;

마찬가지로 c2.kind = "Sqade"; c2 객체만의 kind 값이 되는것.

 

c1.width = 200;

c1.height = 300;

c1 객체가 클래스 변수에 값을 다르게 지정

클래스 변수를 다르게 지정 했음으로 c2 width,height 동일하게 변경

 

클래스 변수 놀이터(해쉬값) 하나밖에 없는데 변경되면 같이 변경되는게 당연

객체 변수 놀이터(해쉬값) 지들이 새로만들어서 쓰기 때문에 변경해도 자기 놀이터만 변경됨.

 

정리

1.지역변수와 전역변수의 구분은 선언한 위치에 따라다르다.

2.전역변수는 어디서나 호출 가능하고 지역변수는 Method 안에 서식한다.

3.전역변수 종류는 두가지로 객체변수,클래스변수가 있다

4.객체변수는 같은 클래스에서만 자유롭게 사용가능하고, 클래스 변수는 다른 클래스에서도 사용이 가능하다.

5.클래스 변수는 해쉬값이 같고,객체 변수는 객체 선언마다 다른 해쉬값이 생성된다.

반응형

+ Recent posts