[JAVA] static 변수, 메서드 개념 및 구현Language/JAVA2021. 2. 16. 01:07
목차 📖
반응형
1. static 변수(클래스 변수, 정적 변수) 란?
1) 개념
클래스 한 개에서 여러 개의 인스턴스를 사용할 경우 인스턴스마다 각각의 멤버 변수 공간이 생길 것이다.
모든 인스턴스가 같은 값을 공유해야 할 경우 static 변수를 사용한다.
처음 프로그램이 로드될 때 단 한번 데이터 영역에 생성된다.
인스턴스의 생성과 상관없이 사용할 수 있으므로 클래스 이름을 참조한다.
2) static 변수 구현
2.1) Student.java
학생 객체가 생성될 때마다 자동으로 학번을 부여하기 위해 최초 학번 값인 1000을 static 변수로 생성하였다.
이후 생성자가 호출될 때마다 serialNum 값을 학번에 저장하고 학번 값을 1씩 증가시킨다.
public class Student {
private static int serialNum = 1000; //static 변수
public String name; //이름
public int id; //학번
public int address; //주소
public Student(String name) {
this.id = serialNum;
this.name = name;
serialNum++;
}
public static int getSerialNum() {
return serialNum;
}
public void showInfo() {
System.out.println("학번: " + id);
System.out.println("이름: " + name);
}
}
2.2) StudentTest.java
생성자 매개변수에 이름만 있기 때문에 2개의 객체를 생성하고 각각 이름을 설정해 준 뒤 객체 정보를 출력해보면 학번이 자동으로 부여된 것을 확인할 수 있다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student("Park");
Student studentLee = new Student("Lee");
studentPark.showInfo();
studentLee.showInfo();
}
}
그 이외에도 공유 공간이기 때문에 모든 객체에서 SerialNum static 변수를 직접 호출할 수 있다는 것을 확인할 수 있다.
Student studentPark = new Student("Park");
Student studentLee = new Student("Lee");
System.out.println(studentPark.getSerialNum());
System.out.println(studentLee.getSerialNum());
System.out.println(Student.getSerialNum());
2.3) 출력 결과
2. static 메서드
일반 인스턴스 메서드에서는 static 변수를 사용할 수 있지만 static 메서드 안에서 인스턴스 변수를 사용할 수 없다.
왜냐하면 static 변수는 인스턴스를 생성하지 않아도 실행되기 때문에 문법적으로 오류가 발생한다.
3. 표로 정리한 변수 개념
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | Life Cycle |
지역 변수 | 함수 내부 | 함수 내부 | stack | 함수 호출 시 생성 함수가 끝나면 소명 |
멤버 변수 | 클래스 멤버 변수 | 클래스 내부 private가 아닐 경우 다른 클래스 | heap | 인스턴스가 생성 시 생성 가비지 컬렉터가 메모리를 수거할 때 소멸 |
static 변수 | static 예약어를 사용하여 클래스 내부 | 클래스 내부, private가 아닐 경우 클래스 이름으로 다른 클래스 | data | 프로그램이 처음 시작할 때 생성 프로그램이 끝나고 메모리를 해제할 때 소멸 |
728x90
반응형
'Language > JAVA' 카테고리의 다른 글
[JAVA] 배열(Array), 참조 배열(Reference Array) 개념 및 구현 (0) | 2021.02.17 |
---|---|
[JAVA] 싱글턴 패턴(Singleton pattern) 개념 및 구현 (3) | 2021.02.16 |
[JAVA]this 키워드 개념 및 구현 (0) | 2021.02.15 |
[JAVA]접근 제어자(Access modifier) 개념 및 구현 (0) | 2021.02.14 |
[JAVA] 참조 자료형(Reference data type) 개념 및 구현 (0) | 2021.02.14 |
@피망IT :: Peemang IT Blog
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊