[JAVA] static 변수

2021. 9. 14. 00:43Web/JAVA

728x90

static이란?

고정된이란 사전적 의미를 갖고 있습니다.

특정 값이 메모리에 할당되면 그 값이 유지되는 것을 의미하며

특정한 값을 공유해야하는 경우에 사용할 수 있습니다.

 


 

ex) 학생이 생성될 때마다 학번이 증가해야 하는 경우

 

학번의 기준이 되는 값을 static으로 생성해야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package staticex;
 
public class Student {
    
    static int serialNum = 10000// 기준이 되는 값, 10000부터 시작
    int studentID;
    String studentName;
    
    public Student() {
        serialNum++// 모든 인스턴트에서 공유되면서 증가하도록 
        studentID = serialNum; // 증가된 serialNum은 모든 인스턴트에서 공유되는 값이므로 studentID에 넣어준다
    }
}
 
cs

 

새로운 학생이 생성될 때 마다 static 변수 값을 복사해 증가시킨 다음 값을 인스턴트 학번 변수에 저장합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package staticex;
 
public class StudentTest1 {
 
    public static void main(String[] args) { 
       Student studentKim = new Student();
        System.out.println(studentKim.studentID); // studentID 가 순차적으로 부여되도록 // 10001
    
       Student studentLee = new Student();
        System.out.println(studentLee.studentID); // 10002 
        
        System.out.println(studentKim.serialNum); // 두 개의 인스턴트가 가리키는 serialNum은 10002로 동일값
        System.out.println(studentLee.serialNum); // 10002 
    }
 
}
 
cs

 

static 메서드

클래스 메서드라고도 하며 static 변수를 위한 기능을 제공합니다.

static 메서드에서는 생성이 불확실한 인스턴스 변수를 사용할 수 없습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package staticex;
 
public class Student {
    
    private static int serialNum = 10000// 기준이 되는 값, 10000부터 시작
    
    int studentID;
    String studentName;
    
    public Student() {
        serialNum++// 모든 인스턴트에서 공유되면서 증가하도록 
        studentID = serialNum; // 증가된 serialNum은 모든 인스턴트에서 공유되는 값이므로 studentID에 넣어준다
    }
 
    public static int getSerialNum() {
        int i = 10// 지역변수, getSeriaNum 메서드가 호출될 때 생성됐다가 끝나면 없어짐
        
        i++;
        System.out.println(i);
        
        // studentName = "홍길동"; // 인스턴스 변수, 멤버변수, 유효될 때 생성되는 변수, static 메서드에서 인스턴스 변수를 사용할 수 없음
        
        return serialNum; // static 변수, 클래스 변수
    }
    
}
 
cs

 

※ 변수 선언의 유효 범위

728x90

'Web > JAVA' 카테고리의 다른 글

[JAVA] ArrayList  (0) 2021.09.16
[JAVA] singleton 패턴  (0) 2021.09.15
[JAVA] this란?  (0) 2021.09.09
[JAVA] 정보은닉(information hiding)  (0) 2021.09.08
[JAVA] 객체지향 프로그래밍과 클래스  (0) 2021.09.08