static 변수
여러 인스턴스가 하나의 값을 공유할 필요가 있음
static 변수는 처음 프로그램이 로드 될 때 데이터 영역에 생성 됨
인스턴스의 생성과 상관 없이 사용할 수 있으므로 클래스 이름으로 참조
Student.serialNum = 100;
클래스 변수, 정적 변수라고도 함
예제1
Student 클래스
public class Student {
public static int serialNum = 1000;
private int studentID;
public String studentName;
public String address;
public Student(String name) {
studentName = name;
serialNum++;
}
public Student (int id, String name) {
studentID = id;
studentName = name;
address = "주소 없음";
serialNum++;
}
public void showStudentInfo() {
System.out.println(studentName + ", " + address);
}
public String getStudentName() {
return studentName;
}
}
StudentIdTest 클래스
public class StudentIdTest {
public static void main(String[] args) {
Student studentLee = new Student("Lee");
System.out.println(studentLee.serialNum);
Student studentKim = new Student("Kim");
System.out.println(studentLee.serialNum);
System.out.println(studentKim.serialNum);
}
}
다음과 같이 serialNum은 어디에서나 동일한 메모리르 바라보고 있다.
아이디를 serialNum으로 하여 유일한 값으로 만든다.
예제2
public class Student {
public static int serialNum = 1000;
private int studentID;
public String studentName;
public String address;
public Student(String name) {
studentName = name;
serialNum++;
studentID = serialNum;
}
public void showStudentInfo() {
System.out.println(studentName + ", " + address);
}
public String getStudentName() {
return studentName;
}
public int getStudentID() {
return studentID;
}
}
public class StudentIdTest {
public static void main(String[] args) {
Student studentLee = new Student("Lee");
Student studentKim = new Student("Kim");
System.out.println(studentLee.getStudentID());
System.out.println(studentKim.getStudentID());
}
}
단 하나만 존재하는 인스턴스 - singleton pattern
생성자는 private으로
static으로 유일한 객체 생성
외부에서 유일한 객체를 참조할 수 있는 public static get() 메서드 구현
예제
Company 클래스
public class Company {
private static Company instance = new Company();
private Company() {}
public static Company getInstance() {
if(instance == null) {
instance = new Company();
}
return instance;
}
}
CompanyTest 클래스
public class CompanyTest {
public static void main(String[] args) {
Company company1 = Company.getInstance();
Company company2 = Company.getInstance();
System.out.println(company1);
System.out.println(company2);
}
}
다음과 같이 동일한 인스턴스를 가르키는 것을 확인할 수 있다,
static과 singleton pattern
카드 회사가 있습니다. 카드 회사는 유일한 객체이고, 이 회사에서는 카드를 발급하면 항상 고유번호가 자동으로 생성됩니다.
10001부터 시작하여 카드가 생성될떄 마다 10002, 10003식으로 증가 됩니다.
다음 코드가 수행 되도록 Card 클래스와 CardCompany 클래스를 구현하세요
CardCompany 클래스
CardCompanyTest 클래스