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)와 생성과 소멸은 각 변수의 종류마다 다르다.
- 지역변수, 멤버 변수, 클래스 변수는 유효 범위와 생성과 소멸, 사용하는 메모리도 다르다.
--> 지역 변수 : 함수 내에서 선언되고 함수가 호출될 때 스택 메모리에 올라간다.
--> 멤버 변수 : 인스턴스가 생성될 때 힙 메모리에 올라간다.
--> static 변수 : 프로그램이 처음 시작할 때 데이터 영역에 생성된다.
- static 변수는 프로그램이 메모리에 있는 동안 계속 그 지역을 차지하므로 너무 큰 메모리를 할당하는 것은 좋지 않다.
- 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋다.
- 멤버 변수가 너무 많으면 인스턴스 생성 시 쓸데없는 메모리가 할당 된다.
- 상황에 적절하게 변수를 사용해야 함.
'개발공부 > Java' 카테고리의 다른 글
[Java] 11. static과 싱글톤 패턴 예제 (0) | 2021.11.28 |
---|---|
[Java] 10. static 응용 - 싱글톤 패턴(Singleton Pattern) (0) | 2021.11.27 |
[Java] 09. Static 변수와 Static 메서드에 대하여...(1) (0) | 2021.11.24 |
[Java] 08. 객체협력 프로그래밍 예제 (0) | 2021.11.24 |
[Java] 07. 객체 자신을 가리키는 this / 객체 간의 Collaboration (0) | 2021.11.22 |