학생이 입학하면 학번이 자동으로 생성되며 학번이 1씩 증가하는 코드에서 학번에 100을 더한 값이 학생 카드 번호가 되는 코드를 만들어 보는걸 했다.
package staticex;
public class Student3 {
private static int serialNum = 1000;
int studentID;
String studentName;
int grade;
String address;
int studentCard;
public Student3(){
serialNum++;
studentID = serialNum;
studentCard = serialNum + 100;
}
public String getStudentName(){
return studentName;
}
public void setStudentName(String name){
studentName = name;
}
public static int getSerialNum(){
// int i = 10;
return serialNum;
}
public static void setSerialNum(int serialNum){
Student3.serialNum = serialNum;
}
public int getStudentCard(){
return studentCard;
}
}
int StudentCard를 선언한뒤
생성자 안에서 'StudentCard = 학번 + 100' 으로 해결했다.
테스트코드
package staticex;
public class StudentTest6 {
public static void main(String[] args){
Student3 student3 = new Student3();
student3.setStudentName("웅나웅나");
System.out.println(student3.getStudentCard());
Student3 studentSad = new Student3();
studentSad.setStudentName("어려워슬퍼");
System.out.println(studentSad.getStudentCard());
Student3 studentt = new Student3();
studentt.setStudentName("왜이러지");
System.out.println(studentt.getStudentCard());
}
}

학번 초깃값 1000에서 1씩 증가하며 카드 번호는 100이 붙는 모습이다.
그런데 학생 카드번호가 학번에 100이 붙는게 아니라 점차 100씩 증가하는, 즉 1101 다음은 1202, 1303.... 이런식으로 나오게 하고 싶어졌다.
그래서 무작정 해보니
package staticex;
public class Student3 {
private static int serialNum = 1000;
int studentID;
String studentName;
int grade;
String address;
int studentCard;
int studentCount;
public Student3(){
serialNum++;
studentID = serialNum;
// studentCard = serialNum + 100;
studentCount++;
studentCard = serialNum + (studentCount * 100);
}
public String getStudentName(){
return studentName;
}
public void setStudentName(String name){
studentName = name;
}
public static int getSerialNum(){
// int i = 10;
return serialNum;
}
public static void setSerialNum(int serialNum){
Student3.serialNum = serialNum;
}
public int getStudentCard(){
return studentCard;
}
}
int StudentCount로 학생의 수를 몇명인지 파악하는 변수를 선언한 뒤
생성자 안에 studentCount++; 로 학생 객체가 만들어 질때마다 학생의 수를 새고
학생 카드 번호 = 학번 + (학생 수 * 100); 으로 코드를 만들어 봤다.
그러나 기대와 다르게 결과는 예상과 달랐다.

알아보니 생성자 안에 인스턴스 변수를 선언했더니 내 생각과는 다르게 매번 각 객체마다 studentCount가 0으로 초기화 되어 항상 학생 수가 0에서 시작해 studentCount++;로 1이 되고 끝나 결과 값이 저랬던 것이다.
마침 static 변수를 배웠으니 바로 적용해보자
package staticex;
public class Student3 {
private static int serialNum = 1000;
int studentID;
String studentName;
int grade;
String address;
int studentCard;
private static int studentCount;
public Student3(){
serialNum++;
studentID = serialNum;
// studentCard = serialNum + 100;
studentCount++;
studentCard = serialNum + (studentCount * 100);
}
public String getStudentName(){
return studentName;
}
public void setStudentName(String name){
studentName = name;
}
public static int getSerialNum(){
// int i = 10;
return serialNum;
}
public static void setSerialNum(int serialNum){
Student3.serialNum = serialNum;
}
public int getStudentCard(){
return studentCard;
}
}

studentCount를 static 변수로 선언해 이 변수는 모든 Student3 객체가 공유하게 된다.
즉, 모든 객체가 동일한 studentCount 값을 참조하게 되며, 객체가 생성될 때마다 이 값이 증가한다.
'오류, 기능, 문제해결(JAVA)' 카테고리의 다른 글
| 문자열의 길이 추출 length() / length. length(), size() 차이 (0) | 2024.12.23 |
|---|---|
| 두 수를 나누는데 소수점을 활용해야함 (0) | 2024.12.23 |
| 한 파일에 클래스가 두 개 존재 할 때 (0) | 2024.12.16 |
| 자바 별찍기 (0) | 2024.12.10 |
| for문 실행순서, 그리고 그 때문에 생긴 while과 결과 차이 (0) | 2024.12.10 |