각진 세상에 둥근 춤을 추자

[Java] static 변수 본문

Java

[Java] static 변수

circle.j 2022. 9. 17. 22:43

static 변수란 정적 변수를 말한다.

 

 

 

static 변수는 클래스 내부에 선언하지만, 다른 멤버 변수처럼 인스턴스가 생성될 때마다 새로 생성하지 않는다.

static 변수는 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 메모리 공간이 할당되며, 그 값은 모든 인스턴스가 공유한다.

 

 

 

학생이 새로 생성되면 학번을 차례로 부여하는 프로그램을 생성해 본다.

여기서 static 변수의 이름은 serialNum이다.

 

serialNum은 학생이 생성될 때마다 순서대로 증가한다.

이 증가한 값을 각 학생의 학번에 대입해 학생에게 새로운 학번을 부여한다. 

 

 

1. 학생 클래스 생성하기

package ch06_3;

public class Student {
	
	// static 변수는 인스턴스 생성과 상관 없이 먼저 생성된다.
	public static int serialNum = 1000;
	public int studentID;
	public String studentName;
	public int grade;
	public String address;
	
	public String getStudentName() {
		return studentName;
	}
	
	public void setStudentName(String name) {
		studentName = name;
	}
}

 

 

2. static 변수 테스트하기

package ch06_3;

public class StudentTest1 {
	public static void main(String[] args) {
		
		Student student1 = new Student();
		student1.setStudentName("Camila");
		
		// serialNum 변수의 초기값 출력
		System.out.println(student1.serialNum);
		// serialNum 변수 값 증가
		student1.serialNum++;
		
		
		Student student2 = new Student();
		student1.setStudentName("Aisha");
		
		// 증가된 값 출력
		System.out.println(student2.serialNum);
		System.out.println(student1.serialNum);
		
	}

}

 

 

3. 학번 생성하기

 

학생이 한 명 생성될 때마다 학번을 자동으로 부여하는 프로그램을 완성한다.

package ch06_3;

public class Student1 {

	public static int serialNum = 1000;
	public int studentID;
	public String studentName;
	public int grade;
	public String address;
	
	public Student1() {
		serialNum++;
		studentID = serialNum;
	}
	
	public String getStudentName() {
		return studentName;
	}
	
	public void setStudentName(String name) {
		studentName = name;
	}
	
}

 

4. 학번 확인하기

 

StudentTest2 클래스에서 실제로 학생이 생성될 때마다 증가된 다른 학번을 가지는지 확인해 본다.

package ch06_3;

public class Student2 {
	public static void main(String[] args) {
		
		Student1 s1 = new Student1();
		s1.setStudentName("Julissa");
		System.out.println(s1.serialNum);
		System.out.println(s1.studentName+ " 학번: "+s1.studentID);
		
		Student1 s2 = new Student1();
		s2.setStudentName("Damien");
		System.out.println(s2.serialNum);
		System.out.println(s2.studentName+ " 학번: "+s2.studentID);
		
	}
}