본문 바로가기
개발공부/Java

[Java] 09. Static 변수와 Static 메서드에 대하여...(2)

by sangyeon 2021. 11. 26.
728x90

1. static 메서드 만들기

: serialNum 변수를 private으로 선언하고 getter/setter 구현

 

- Employee.java

package ch16;

public class Employee {

private static int serialNum = 1000;

public static int getSerialNum() {
return serialNum;
}

> System.out.println(Employee.serialNum); ---> Error(직접 호출 불가)
> System.out.println(Employee.getSerialNum()); ---> 메서드를 통한 호출은 가능

 

 

2. static 메서드(클래스 메서드)에서는 인스턴스 변수를 사용할 수 없다.

- static 메서드는 인스턴스 생성과 무관하게 클래스 이름으로 호출 될 수 있다.

- 인스턴스 생성 전에 호출 될 수 있으므로 static 메서드 내부에서는 인스턴스 변수를 사용할 수 없다. 

private static int serialNum = 1000;

....

public static int getSerialNum() {
int i = 0;             // 지역변수

employeeName = "Lee";  ---> Error   //인스턴스 변수

return serialNum;  // static 변수
}

> static 메서드는 main 클래스에서 인스턴스 생성과 무관하게 호출될 수 있기 때문에..

static 메서드 안에 있는 변수들은 프로그램 실행 시에 이미 메모리에 로드 되어 있어야 한다. 근데, 인스턴스의 경우 실제 인스턴스가 만들어져야 메모리에 로드되기 때문에 static 메서드 안에서는 인스턴스 변수를 사용할 수 없다.

 

 

3. 변수의 유효 범위와 메모리

- 변수의 유효 범위(scope)와 생성과 소멸은 각 변수의 종류마다 다르다.

- 지역변수, 멤버 변수, 클래스 변수는 유효 범위와 생성과 소멸, 사용하는 메모리도 다르다.

https://gitlab.com/easyspubjava/javacoursework/-/blob/master/Chapter2/2-17/README.md

--> 지역 변수 : 함수 내에서 선언되고 함수가 호출될 때 스택 메모리에 올라간다.

--> 멤버 변수 : 인스턴스가 생성될 때 힙 메모리에 올라간다.

--> static 변수 : 프로그램이 처음 시작할 때 데이터 영역에 생성된다.

 

- static 변수는 프로그램이 메모리에 있는 동안 계속 그 지역을 차지하므로 너무 큰 메모리를 할당하는 것은 좋지 않다.

- 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋다.

- 멤버 변수가 너무 많으면 인스턴스 생성 시 쓸데없는 메모리가 할당 된다.

- 상황에 적절하게 변수를 사용해야 함.

728x90