본문 바로가기
언어/JAVA

[JAVA] static 변수(정적 변수) + 지역변수, 전역변수

by 새벽물망초 2022. 9. 23.

1. static 변수

class HouseLee {
    String lastname = "이";
}

public class Sample {
    public static void main(String[] args) {
        HouseLee lee1 = new HouseLee();
        HouseLee lee2 = new HouseLee();
    }
}

객체마다 객체변수 lastname을 저장하기 위한 메모리가 별도로 할당된다.

HouseLee 클래스의 lastname은 어떤 객체이던지 동일한 값인 "이" 이어야 하는데,

이렇게 항상 값이 변하지 않는 경우라면 static 사용시 메모리의 이점을 얻을 수 있다.

 

class HouseLee {
    static String lastname = "이";
}

public class Sample {
    public static void main(String[] args) {
        HouseLee lee1 = new HouseLee();
        HouseLee lee2 = new HouseLee();
    }
}

위와 같이 lastname 변수에 static 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점이 있다.

 

동시에, 공유의 개념도 가지고 있는데 static 으로 설정하게 되면 같은 곳의 메모리 주소만을 바라보기 때문에

static 변수의 값을 공유하게 된다.

class Counter  {
    static int count = 0;
    Counter() {
        count++;  // count는 더이상 객체변수가 아니므로 this를 제거하는 것이 좋다.
        System.out.println(count);  // this 제거
    }
}

public class Sample {
    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
    }
}
1
2

그냥 int count 였으면 각각의 객체 c1, c2 에서 모두 1로 나왔을텐데(객체는 독립적이므로)

static int count 이므로 같은 메모리의 주소를 공유하므로 count 값이 공유된다.

 

https://wikidocs.net/228

 

07-03 정적(static) 변수와 메소드

이번에는 스태틱(static)에 대해서 알아보자. [TOC] ## static 변수 예를 들어 다음과 같은 HouseLee 클래스가 있다고 하자. *Sample. ...

wikidocs.net

 

 

예시

일반변수

바로 main함수로 ㄱㄱ

i = 0 일때, test1 함수 실행

number++ 에 의해 1 리턴

 

i = 1 일때, test1 함수 실행

number++ 에 의해 1 리턴

...

i = 4 일때, test1 함수에 의해 1리턴됨

 

 

 

정적변수

바로 main함수로 ㄱㄱ

i = 0 일때, test1 함수 실행

number++ 에 의해 1 리턴

 

i = 1 일때, test1 함수 실행

number++ 에 의해 2 리턴

...

i = 4 일때, test1 함수에 의해 5리턴됨

(static 변수는 같은 메모리의 주소를 공유, 프로그램 종료전까지 계속 실행됨)

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dd1587&logNo=221106199316 

 

C언어 static변수(정적변수)

C언어 static변수(정적변수)C언어 static변수에 대해 알아보려고하는데요. static변수는 한글로는 정적변...

blog.naver.com

 

 

 

2. 지역변수 vs 전역변수

class Ex_variables{

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

void method() {
	int local_int = 0;  //지역변수 { }안에 생성되며 { }를 벗어나면
}                	//method() 라는 메소드가 끝나는 시점에 바로 삭제

}

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

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

특정한 구역({ })안에 생성되어 그 지역에만 사용할수 있는 변수는 지역변수

 

https://java119.tistory.com/20

 

[Java] 지역변수와 전역변수

전역변수(Global variable)와 지역변수(Local variables) 선언위치에 따른 변수의 종류 변수는 선언위치에 따라 전역변수와 지역변수로 나눠지는데 선언위치에 따라 선언위치에 따라 꼭 기억!! 말그대로

java119.tistory.com

 

 

'언어 > JAVA' 카테고리의 다른 글

상속 & 생성자  (0) 2022.10.14
흥달쌤 영상답변 문제 모음  (0) 2022.10.14
변수 자료형  (0) 2022.09.16
[JAVA] 추상 클래스, 추상 메소드  (0) 2022.07.12
[JAVA] 클래스, 상속, 생성자  (0) 2022.07.12

댓글