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 |
Tags
- SUB Query
- downcasting
- Servlet 맵핑
- static메서드
- 스프링 모달창
- oracle 연동
- spring annotation
- 오라클 비교연산자
- singleton
- 템플릿
- 깃 명령어
- static
- 형변환
- 싱클톤패턴
- 사용자 데이터그램 프로토콜
- 모달창 여러개
- 리스트 모달창
- static 예제
- react
- 상속
- Java
- 다운캐스팅
- AOP란?
- order by
- GROUP BY
- 추상 메서드
- 다중 모달창
- 객체협력
- IP
- 이클립스 오라클 연동
Archives
- Today
- Total
모든지 기록하자!
[Java] static 변수 본문
728x90
인스턴스란 클래스에서 생성된 개개의 객체이다.
인스턴스가 생성되면 각각의 메모리를 갖게 된다.
여러 개의 인스턴스가 모두 공유하는 값이 필요할 때 static변수로 선언한다.
static 변수는 인스턴스가 생성될 때마다 다른 메모리를 가지는 것이 아니라
프로그램이 메모리에 적재(load) 될 때 데이터 영역의 메모리에 생성된다.
따라서 인스턴스의 생성과 관계없이 클래스 이름으로 직접 참조한다.
ex) Student.serialNum = 100; // serialNum이 static 변수 또는 클래스 변수라고도 한다.
멤버 변수는 다른 말로 인스턴스 변수라고 한다.
static 변수 예
여러 인스턴스가 하나의 메모리 값을 공유할 때 필요
학생이 생성될 때 마다 학번이 증가해야 하는 경우
기준이 되는 값은 static 변수로 생성하여 유지한다.
각 학생이 생성될 때 마다 static 변수 값을 복사해 와서 하나 증가시킨 값을
생성된 인스턴스의 학번 변수에 저장해 준다.
학생이 생성될때 마다 학번을 하나씩 증가하며 부여해주는 예제이다.
public class Student {
private static int serialNum = 10000; // 외부에서 변경하지 못하게 private로 선언
//공유하는 기준값
int studentID; // 학생ID
String studentName; // 학생이름
public Student() { //Student가 생성시
serialNum++; // 공유되면서 1씩 증가
studentID = serialNum; // 내 studentID 값은 serialNum에서 복사 하여
// 각각 인스턴스마다 가지고있다.
}
public static int getSerialNum() { // private로 선언 했기 때문에 getMethod 구현
return serialNum; // static 변수, 클래스 변수
}
}
public static int getSerialNum() { // private로 선언 했기 때문에 getMethod 구현
int i = 10; // 지역변수
//studentName = "홍길동"; // 멤버변수, 인스턴스 변수
return serialNum; // static 변수, 클래스 변수
}
지역변수는 스택(stack) 메모리에 저장되기 때문에 메서드가 종료되면 사라진다.
그러므로 static과 상관없이 사용 가능하다.
studentName은 생성되지 않은 인스턴스 변수에 "홍길동"을 넣게 될 위험이 있다.
따라서 static 메서드에서는 멤버 변수, 인스턴스 변수를 사용할 수 없다.
public class StudentTest {
public static void main(String[] args) {
System.out.println(Student.getSerialNum());
// 되도록이면 static변수나 static메서드는
// 클래스 이름으로 직접 호출해서 사용한다.
Student studentJ = new Student();
System.out.println(studentJ.getSerialNum());
Student studentT = new Student();
System.out.println(studentT.studentID);
}
}
출력 결과
728x90
'Java' 카테고리의 다른 글
[Java] 암호화 / 복호화 (0) | 2021.05.13 |
---|---|
[Java] 배열을 이용한 예제( 1차원배열의 합, 2차원배열의 합, 잔돈구하기) (0) | 2021.05.12 |
[Java] 객체간의 협력(대중교통 이용) (0) | 2021.05.11 |
[Java] 객체지향 프로그래밍(OOP) 과 클래스(Class) (0) | 2021.05.11 |
[Java] 배열을 이용한 성적 처리 프로그램 (0) | 2021.05.11 |
Comments