728x90
반응형
[Java] 28. Static 변수와 원리
1. static 변수
static: 프로그래밍에서 중요한 개념 중 하나이다.
-클래스 변수라고도 불린다.
-클래스의 모든 인스턴스가 공유하는 변수이다.
=즉, 객체가 동일한 static 변수의 값을 공유한다.
2. static 변수의 원리 : 왜 static 변수라고 불릴까?
우리가 자바 프로그램을 실행하면, 프로그램을 수행하기 위해 운영체제로부터 할당받는 메모리들이 존재한다.
그 특성에 따라 영역이 존재하는데, 그 구성요소는 아래와 같다.
메모리 영역(JVM Memory, Runtime Data Area)
-메서드 영역->스택->힙 순서로 동작한다.
3. static 변수 연습하기
4-1. 카드 Class를 만들어, static을 이용해 카드마다 고유의 번호 만들기
package basic.ch12;
public class Card {
// 멤버 변수, static 변수
private String name;
private static int cardNumber = 11111;
// 생성자
public Card(String name) {
this.name = name;
this.cardNumber = Card.cardNumber;
Card.cardNumber += 1001;
}
// 멤버 함수
// get, set 작성
public String getName() {
return this.name;
}
public int getCardNumber() {
return this.cardNumber;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Card card1 = new Card("신한카드");
System.out.println(Card.cardNumber);
Card card2 = new Card("현대카드");
System.out.println(Card.cardNumber);
Card card3 = new Card("국민카드");
System.out.println(Card.cardNumber);
} // end of main
} // end of class
// 다른 사람의 코드
public class Card {
//멤버 변수, static 변수
private static int f_CardNum = 1000;
private static int s_CardNum = 1000;
private static int t_CardNum = 1000;
private int f_CardNumber;
private int s_CardNumber;
private int t_CardNumber;
private String cardName;
//생성자
public Card(String cardName) {
System.out.println(cardName + "가 발급되었습니다.");
f_CardNumber = f_CardNum++;
s_CardNumber = s_CardNum++;
t_CardNumber = t_CardNum++;
}
//멤버 함수
public void cardNumber() {
System.out.println("카드번호는 " + f_CardNumber + "-" + s_CardNumber + "-" + t_CardNumber);
}
//get, set 작성
public int getF_CardNumber() {
return f_CardNumber;
}
public void setF_CardNumber(int f_CardNumber) {
this.f_CardNumber = f_CardNumber;
}
public int getS_CardNumber() {
return s_CardNumber;
}
public void setS_CardNumber(int s_CardNumber) {
this.s_CardNumber = s_CardNumber;
}
public int getT_CardNumber() {
return t_CardNumber;
}
public void setT_CardNumber(int t_CardNumber) {
this.t_CardNumber = t_CardNumber;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
//코드 테스트(메인함수)
public static void main(String[] args) {
Card card1 = new Card("신한카드");
card1.cardNumber();
System.out.println("-----------------------");
Card card2 = new Card("신한카드");
card2.cardNumber();
System.out.println("-----------------------");
Card card3 = new Card("신한카드");
card3.cardNumber();
}
}
4-2. 회사, 사원 Class를 만들어, 각 사원 객체마다 고유의 사원 번호 할당하기.
package basic.ch12;
public class Employee {
private int employeeId; // 멤버 변수(객체마다 고유의 값을 가져야 한다.)
private String name;
private String department;
private int serialNumber;
// 요구 조건
// 사원이 존재하게 될 때마다 고유한 사원 번호를 할당하고 싶다.
// 단, 사원 번호는 중복되어서는 안된다.
// static과 멤버 변수에 활용
// 객체 생성자, 멤버 변수, 함수를 필요하다 호출 또는 초기화 할 수 있다.
// static과 멤버 변수의 활용
public Employee(String name) {
this.name = name;
this.employeeId = Company.empSerialNumber;
Company.empSerialNumber++;
}
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public int getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(int serialNumber) {
this.serialNumber = serialNumber;
}
}
package basic.ch12;
public class Company {
public static String companyName = "그린 컴퍼니";
static int empSerialNumber = 1000;
// 코드 테스트
public static void main(String[] args) {
// 코드의 시작점
Employee employee1 = new Employee("홍길동");
System.out.println(employee1.getEmployeeId());
Employee employee2 = new Employee("임꺽정");
System.out.println(employee2.getEmployeeId());
Employee employee3 = new Employee("신사임당");
System.out.println(employee3.getEmployeeId());
}
}
728x90
반응형
'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 30. Oracle 에서 Java 문서 읽기 (0) | 2024.04.19 |
---|---|
[Java] 28. static 메서드의 개념과 메서드 오버로딩 (0) | 2024.04.19 |
[Java] 27. Java로 스타크래프트 모델링하기 (0) | 2024.04.18 |
[Java] 26. 참조 변수 this, this의 3가지 용법 (0) | 2024.04.18 |
[Java] 25. getter/setter 메서드 (0) | 2024.04.17 |