static 변수
: static 변수는 공통으로 사용하는 변수가 필요한 경우 사용한다. (객체들이 공유해야 하는 데이터가 필요할 때)
모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.
- 여러 인스턴스가 공유하는 기준 값이 필요한 경우
- 회사 사원이 입사할 때마다 새로운 사번이 필요한 경우
- 은행에서 대기표를 뽑을 경우 (2대 이상)
→ 공유해야되는 변수가 필요할 때 'static' 키워드를 쓰면 됨
Employee 클래스
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 32 33 34 35 36 37 38 39 40 | package ch01; public class Employee { public static int serialNum = 1000; private int employeeId; private String employeeName; private String department; public Employee() { serialNum++; employeeId = serialNum; } public int getEmployeeId() { return employeeId; } public void setEmployeeId(int employeeId) { this.employeeId = employeeId; } public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } } | cs |
→ 생성자에서 serialNum++;을 해주고 serialNum을 employeeId에 저장하였다.
EmployeeMainTest
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 | package ch01; public class EmployeeMainTest { public static void main(String[] args) { Employee employeeLee = new Employee(); employeeLee.setEmployeeName("이순신"); Employee employeeKim = new Employee(); employeeKim.setEmployeeName("김유신"); Employee employeeGang= new Employee(); employeeGang.setEmployeeName("강민정"); System.out.println(employeeLee.getEmployeeName()+", "+employeeLee.getEmployeeId()); System.out.println(employeeKim.getEmployeeName()+", "+employeeKim.getEmployeeId()); System.out.println(employeeGang.getEmployeeName()+", "+employeeGang.getEmployeeId()); System.out.println(Employee.serialNum); } } 결과 화면 이순신, 1001 김유신, 1002 강민정, 1003 1003 | cs |
→ 객체를 생성한 다음 .setEmployeeName으로 이름을 저장하고 getEmployeeId()를 호출하면 위와 같은 결과를 얻는다.
→ static 변수는 객체 생성없이 '클래스이름.메서드이름'으로 호출이 가능하다.
static 메서드와 인스턴스(멤버변수를 다루는) 메서드
인스턴스 메서드
- 인스턴스 생성 후 '참조변수.메서드이름()'으로 호출
- 인스턴스 멤버와 관련된 작업을 하는 메서드이다.
- 메서드 내에서 인스턴스 변수 사용이 가능하다.
static 메서드
- 객체 생성 없이 '클래스이름.메서드이름()'으로 호출
- 인스턴스 멤버와 관련없는 작업을 하는 메서드이다.
- 메서드 내에서 인스턴스 변수 사용이 불가능하다.
>>> 클래스의 멤버변수 중 인스턴스에 공통된 값을 유지해야하는 것이 있으면 static을 붙여준다.
>>> 작성한 메서드 중에서 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드에 static을 붙일 것을 고려한다.
'프로그래밍 > Java' 카테고리의 다른 글
Java_상속과 다형성 (0) | 2023.02.14 |
---|---|
Java_배열, 객체 배열 (0) | 2023.02.12 |
Java_this 사용법 (0) | 2023.02.10 |
Java_접근 제어 지시자와 캡슐화 (0) | 2023.02.09 |
Java_참조자료형 변수 (0) | 2023.02.09 |