# 클래스 변수 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 ```
## 스태틱 변수의 초기값 지정은 일반적으로 명시하는 것이 좋은 코드 관례라 하겠습니다. static 변수는 초기화하지않은 경우 기본값을 가집니다. ## 영문 알파벳을 만드는 부분은 `(char)(‘A’ + Math.random() * 26);`코드의 결과입니다. 이는 아스키코드값을 활용하는 방법인데 "자바 아스키코드표 알파벳" 정도로 구글링해보세요.