Java Static 변수 및 메서드

Codren·2021년 5월 31일
0
post-custom-banner

Section 1. Static 변수

1. Static 변수

여러 인스턴스가 공유하는 변수 (= 클래스 변수) 또는 인스턴스 생성 전에 사용하려는 변수




2. Static 변수 선언 및 접근

  • 변수를 생성할 때 Static 키워드 지정
public class Employee {

	static int serialNum = 1000;	# 클래스 변수 serialNum 생성 
	
	int employeeId;
	String employeeName;
	String department;
}

  • 인스턴스가 생성될 때 만들어지지 않고 프로그램이 메모리에 로딩될 때 DATA 영역에 저장됨

  • 인스턴스 생성과 상관 없이 사용가능하므로 클래스 이름으로 직접 참조
Student.serialNum = 1001;	# 인스턴스.serialNum 도 가능



Section 2. Static 메서드

1. Static 메서드

인스턴스 생성 전에 접근 가능한 메서드

  • Static 변수와 동일한 원리의 메서드
  • Static 메서드에서 멤버 변수로 접근 불가능 (인스턴스 생성 전에 만들어지므로)




2. Static 메서드 선언 및 접근

  • Static 메서드 선언
static int serialNum = 1000;				# static 변수

private int employeeId;
private String employeeName;
private String department;

public static int getSerialNum() {			# static 메서드

	return serialNum;
}

public static void setSerialNum(int serialNum) {	# static 메서드

	# employeeId = 123		# 에러 (멤버 변수에 접근 불가능)
    	# this.serialNum = 1005 	# 에러 (static 메서드 내에서 this. 키워드 사용 불가능)
        # int i = 0; 			# 정상 (지역 변수 사용 가능)
	# serialNum = 1000;		# 정상 (클래스 변수 사용 가능)
        
	Employee.serialNum = serialNum;
}




  • static 메서드 접근
public static void main(String[] args) {

	Employee emp1 = new Employee();			# 객체(인스턴스) 생성	
	Employee.setSerialNum(1004);			# emp1.setSerialNum(1004); 도 가능
	System.out.println(Employee.serialNum);		# emp1.serialNum 도 가능 
    
	}



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

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

  • 지역변수, 멤버 변수, 클래스 변수는 유효범위와 life cycle, 사용하는 메모리도 다름



2. Static 규칙

  • static 변수는 프로그램이 메모리에 있는 동안 계속 메모리를 차지하므로 너무 큰 메모리 할당 X
  • 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋음
  • 멤버 변수가 너무 많으면 인스턴스 생성 시 쓸데없는 메모리가 할당됨
  • 상황에 적절하게 변수를 사용해야 함
post-custom-banner

0개의 댓글