Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
Tags
- 도커 #docker #docker-compose.yml #도커컴포즈 #배포 #spring #mysql #docker-compose
- /
- 도커 #Docker #배포 #Spring #MySQL #백엔드배포
Archives
- Today
- Total
개발자 데뷔!
10. [Java] static 변수 본문
static 변수
= 정적변수
= 클래스변수
static
- '클래스변수(class variable)' 라고도 함
- 클래스 전반에서 공통으로 사용할 수 있는 기준변수
- 각 인스턴스마다 따로 생성되는 변수가 아님
- ex) 학생 인스턴스마다 학번을 자동생성
static 쓰임
- 클래스 내부에 선언.
- 변수 선언 시, 자료형 앞에 static 예약어를 사용한다.
static예약어 자료형 변수이름
static int studentNum;
static 의 메모리할당 ★ ★ ★
- Data 영역에 할당된다!! (ex) 인스턴스 = heap 영역 / 참조변수 = stack 영역)
- 즉, 프로그램 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. (Data 영역의 특징)
- 프로그램이 실행되어 메모리에 올라갔을 때 단 한 번만, 메모리 공간이 할당됨.
- 이후, 생성되는 인스턴스들은 초기에 할당된 그 값을 공유한다.
- 인스턴스가 생성될 때마다 새로 생성되는 멤버변수와 다르다.
- 단, 인스턴스보다 먼저 생성되기 때문에, 인스턴스가 생성되지않아도 class이름을 직접 참조해 사용할 수 있다.
static 사용 예시 _ 학번 자동생성 시스템
학번을 static 변수로 두면,
인스턴스(학생)가 생성될 때마다 static 변수는 1씩 증가하고,
이를 매번 학번 studentID 에 대입해 사용한다.
그렇지 않으면, 모든 인스턴스가 static 변수를 공유하므로, 모두 같은 학번을 가지게 되기 때문이다.
package staticex;
public class Student1 {
public static int serialNum = 1000; // static 변수 선언
int studentID;
String studentName;
int grade;
String address;
// 생성자
public Student1(){
serialNum++; // 인스턴스(학생)이 새로 생성될 때마다, serialNum은 1씩 증가
studentID = serialNum; // static 변수를 그대로 사용할 시, 모두 같은값(학번)을 사용하게 되므로
// 매번 생성된 학번값(serialNum)을 다른 member변수에 대입해줌
}
// getter, setter 메서드
public String getStudentName(){
return studentName;
}
public void setStudentName(String name){
studentName = name;
}
}
클래스 메서드
: static 변수를 위한 메서드
= static 메서드
= class 메서드
static 변수는 data 영역에, 인스턴스보다 먼저 생성되기 때문에 다음과 같은 특징을 갖는다.
- 인스턴스 이름이 아닌, 클래스이름으로 바로 참조가능. (권장)
- 클래스 메서드 (static method) 또한 static으로 선언
- priavate - static 인 멤버변수를 사용할 경우, 반드시 static 인 get(), set() 메서드를 통하여 접근해야 함
- 클래스 메서드 내부에서는, 인스턴스 변수를 사용할 수 없다. (만들어지기 전이기 때문)
변수의 종류 & 유효범위(scope)
변수유형 | 선언위치 | 사용범위 | 메모리 | 생성과 소멸 |
지역변수 (local변수) |
함수 내부에 선언 | 함수 내부에서만 | 스택 | 함수 호출시 생성, 함수 끝날시 소멸 |
멤버변수 (instance 변수) |
클래스 멤버변수로 선언 | 클래스 내부 & private이 아닐 경우 다른 클래스 포함 (with 참조변수) |
힙 | 인스턴스 생성 시 생성, '가비지 컬렉터'가 메모리 수거시 소멸 |
static변수 (class 변수) |
클래스 내부에 (static 예약어)로 선언 |
클래스 내부 & private이 아닐 경우 다른 클래스 (with 클래스 이름) |
데이터 | 프로그램 첫 시작시 생성, 프로그램 끝나고 메모리 해제 시 소멸 |
- 지역변수는 선언한 메서드 내부 에서만 사용할 수 있지만,
- 멤버변수는 클래스의 어느 메서드에서나 사용할 수 있다. 즉, 여러메서드에서 사용하는 변수는 멤버변수로 설정
- static 변수는 여러 인스턴스에서 공통으로 사용한다. 클래스 생성과 상관없이 데이터 영역에 메모리 생성.
'프로그래밍 언어 > Java' 카테고리의 다른 글
12. [Java] 싱글톤(Singleton) 패턴 (static 응용) (0) | 2022.02.01 |
---|---|
11. [Java] 변수의 종류 & 유효범위(scope) (0) | 2022.02.01 |
09. [Java] 객체 간 협력 (0) | 2022.01.31 |
08. [Java] this 예약어 (0) | 2022.01.31 |
07. [Java] 정보은닉 with 접근제어자 (public&private) (0) | 2022.01.31 |