인스턴스 : 클래스에서 생성된 개개인의 객체
static 변수
static 변수의 정의와 사용 방법
여러 개의 인스턴스가 같은 메모리의 값을 공유하기 위해 사용
힙 메모리에 생성되는 게 아님. 메모리가 따로 있음, 메모리는 new할때 할당받는게 아님 전체 프로그래밍이 로드될때 그때 할당받는 영역(ex) 상수, 리터럴, static변수)
static 변수는 인스턴스가 생성될 때마다 다른 메모리를 가지는 것이 아니라 프로그램이 메모리에 적재(load) 될때 데이터 영역의 메모리에 생성됨
따라서 인스턴스의 생성과 관계없이 클래스 이름으로 직접 참조함
Student.serialNum = 100; //serailNum이 static 변수
클래스 변수 라고도 함
멤버변수는 다른 말로 인스턴스 변수라고 함
package staticex;
public class Student {
private static int serialNum = 10000;
int studentID;
String studentName;
public Student() {
serialNum++;
studentID = serialNum;
}
public static int getSerialNum() {
int i = 10; //지역변수
i++;
System.out.println(i);
//studentName = "홍길동"; //멤버변수, 인스턴스 변수
//static메서드에서는 인스턴스 변수 사용 불가
return serialNum; //static변수, 클래스변수
}
/*public static void setSerialNum(int serialNum) {
Student.serialNum = serialNum;
}*/ //가져가게만 함
}
package staticex;
public class studentTest1 {
public static void main(String[] args) {
System.out.println(Student.getSerialNum());
// static 변수나 메서드는 클래스 이름으로 직접 호출해서 사용
// 참조변수로 사용 잘 안함 ( Student -> O, studentJ -> X )
Student studentJ = new Student();
System.out.println(Student.getSerialNum());
Student studentT = new Student();
System.out.println(Student.getSerialNum());
}
}
static 변수 vs 인스턴스 변수
note : serialNumber를 static으로 선언하면 모든 student instance에 대해 하나의 변수로 유지되고 이러한 변수를 class 변수라 한다.
static 변수 예
여러 인스턴스가 하나의 메모리 값을 공유 할 때 필요
학생이 생성될 때마다 학번이 증가해야 하는 경우
기준이 되는 값은 static 변수로 생성하여 유지 함
각 학생이 생성될 때마다 static변수 값을 복사해 와서 하나 증가시킨 값을 생성된 인스턴스의 학번 변수에 저장해 줌
static 메서드
클래스 메서드 라고도 함
메서드에 static키워드를 사용하여 구현
주로 static변수를 위한 기능 제공
static 메서드에서 인스턴스 변수를 사용할 수 없음
static 메서드도 인스턴스의 생성과 관계 없이 클래스 이름으로 직접 메서드 호출
Student.getSerialNum(); //getSerialNum()이 static 메서드
인스턴스의 변수의 경우 꼭 인스턴스가 먼저 생성되어야 하므로 static메서드에서는 생성이 불확실한 인스턴스 변수를 사용할 수 없음
변수의 유효 범위
https://www.youtube.com/watch?v=oonYQa82MU4&list=PLG7te9eYUi7typZrH4fqXvs4E22ZFn1Nj
'Java' 카테고리의 다른 글
[Java] final란 무엇인가? (0) | 2024.05.10 |
---|---|
2-6 클래스와 객체2 (2) - 객체 간의 협력 ex) 승객과 버스 (0) | 2024.03.18 |
2-5 클래스와 객체2 (1) - this (0) | 2024.03.14 |
2-4 클래스와 객체1 (4) - 참조 자료형, private (0) | 2024.03.14 |
2-3 클래스와 객체1 (3) - 클래스, 인스턴스, 참조변수, 참조값, 생성자 (0) | 2024.03.14 |