# 클래스 변수 vs 인스턴스 변수
클래스 내부에 있는 count 필드를
static int count = 0; 이렇게
0으로 초기화해주는 이유가 뭔가요?
초기화를 안 해도 결과는 똑같이 나오는 것 같아서요
그리고 (char)('A' + Math.random() * 26);
이 부분이 어떻게 A-Z 가 되는건지 이해가 쉽게 안되네요 ㅠㅠ..
#### CODE <a class='btn btn-default' href='/codes/54946'>Link</a>
```
public class Main {
public static void main(String[] args) {
Galaxy[] Devices = new Galaxy[5];
for(int i = 0; i < Devices.length; i++) {
Devices[i] = new Galaxy();
}
for(int i = 0; i < Devices.length; i++) {
System.out.printf(Devices[i].toString());
}
System.out.printf("=========================\n");
System.out.printf("Galaxy 객체의 개수: %d\n", Galaxy.count);
}
}
class Galaxy {
String serialNumber;
static int count;
public Galaxy() {
count++;
char code = newCode();
serialNumber = String.format("%s-%d", code, count);
}
public static char newCode() {
return (char)('A' + Math.random() * 26);
}
public String toString() {
return String.format("Galaxy { serialNum: %s }\n", serialNumber);
}
}
```
#### INPUT
```
```
#### OUPUT
```
Galaxy { serialNum: D-1 }
Galaxy { serialNum: H-2 }
Galaxy { serialNum: G-3 }
Galaxy { serialNum: B-4 }
Galaxy { serialNum: B-5 }
=========================
Galaxy 객체의 개수: 5
```
haesamq님의 답변
## 스태틱 변수의 초기값 지정은
일반적으로 명시하는 것이 좋은 코드 관례라 하겠습니다.
static 변수는 초기화하지않은 경우 기본값을 가집니다.
## 영문 알파벳을 만드는 부분은
`(char)(‘A’ + Math.random() * 26);`코드의 결과입니다.
이는 아스키코드값을 활용하는 방법인데
"자바 아스키코드표 알파벳" 정도로 구글링해보세요.