[java]static

eunu·2024년 1월 29일
0

JAVA

목록 보기
4/21

static

package Company;

public class Employee {
	
	// 상속 관계 - 부모클래스 정의 - 멤버변수의 접근제한자 ? --> protected
	// 사원 정보
	// 사번, 이름, 나이, 폰, 입사일, 부서, 결혼여부 - T/F  저장
	// empId, name, age, phone, empDate, dept, marriage
	
	
	// static : empId가 1000번부터 순차적으로 1씩 부여하여 자동으로 사번이 부여되도록 하고 싶음
	private int serial_num = 1000;
	
	protected int empId;
	protected String name;
	protected int age;
	protected String phone;
	protected String empDate;
	protected String dept;
	protected boolean marriage;
	
	public Employee() {}
	public Employee(String name, int age) {
		this.empId = ++serial_num;
		this.name = name;
		this.age = age;
	}
	
	@Override
	public String toString() {
		return empId + "/" + name + "/" + age;
	}
	
}

이러한 코드가 있을 때 결과는

1001/이순신/34
1001/강감찬/28

이렇게 나온다.

왜 그럴까??

  • 정답(왜 그럴까 생각해보고 정답과 같은지 맞춰보세용) —> 왜냐면 사번으로 만들고자 한 serial_num은 각 클래스에 하나씩 공간이 할당되는 개별적인 변수인 것임. 모든 클래스에서 공통적으로 적용되는 변수가 필요해 진거임! =⇒ static 변수

Static

static 변수는 정적변수로 프로그램 시작부터 끝날 때까지 존재하는 변수

메모리 공간 - data 영역에 존재함(힙영역에 존재하는 클래스들과는 별개)

만약 회사 이름 같이 공통적으로 같은 값을 가지는 변수라면 굳이 클래스별로 하나씩 만들어서 메모리를 낭비할 필요 없이

→ 공통으로 사용되는 변수니까 메모리를 낭비할 필요없이 data영역에 존재하는 static변수로 변경

  • private static String company = "korea";

영역별 소멸 시점

  • data - 프로그램 시작부터 끝까지 존재
  • stack - 중괄호 안에서 선언된 시점부터, 중괄호가 끝나면 소멸됨
  • heep - new 생성자() -->> 이때 인스턴스(객체) 메모리 공간에 할당됨 / 필요 없으면 가비지컬렉터 라는 칭구가 자동으로 회수
profile
Just Do It

0개의 댓글