Chapter 05. 객체지향 클래스(3)

박철민·2021년 8월 8일
0
post-thumbnail

static 변수, 메서드

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());
	}
}


static 응용 - singleton pattern

단 하나만 존재하는 인스턴스 - 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);
		
	}
}

다음과 같이 동일한 인스턴스를 가르키는 것을 확인할 수 있다,

코딩해 보세요(3)

static과 singleton pattern

카드 회사가 있습니다. 카드 회사는 유일한 객체이고, 이 회사에서는 카드를 발급하면 항상 고유번호가 자동으로 생성됩니다.
10001부터 시작하여 카드가 생성될떄 마다 10002, 10003식으로 증가 됩니다.
다음 코드가 수행 되도록 Card 클래스와 CardCompany 클래스를 구현하세요

CardCompany 클래스

CardCompanyTest 클래스

profile
취준좀비 컴공

0개의 댓글

관련 채용 정보