아래의 내용은 java_grammer 레파지토리 C06EtcClass 디렉터리에 저장되어있는 내용을 정리함
- C01Math
- C02Calendar
- C03EnumMain
Math, Calendar, Enum 활용법 → 실무 활용 워크플로우
Math 클래스는 수학에서 자주 쓰이는 상수랑 함수들을 미리 구현해놓은 유틸 클래스
모든 메서드가 static이라 객체 생성 없이 바로 Math.메서드()로 호출 가능
System.out.println("random : " + Math.random()); // 0.0 ~ 1.0 미만 double 반환
// (int)(Math.random() * 100) // 0 ~ 99 범위로 변환
실습 예제 - 로또 번호 7개
for (int i = 0; i < 7; i++) {
System.out.println("Lotto (" + i + ") : " + (int)(Math.random() * 100));
}
0-99까지 랜덤 숫자 뽑기. 실제 로또는 중복제거+정렬까지 해야하지만 기본 개념 이해용.
| 메서드 | 기능 | 예제 | 결과 |
|---|---|---|---|
abs(-5) | 절대값 | Math.abs(-5) | 5 |
ceil(5.7) | 올림 | Math.ceil(5.7) | 6.0 |
floor(5.7) | 내림 | Math.floor(5.7) | 5.0 |
round(5.7) | 반올림 | Math.round(5.7) | 6 |
max(10,20) | 최대값 | Math.max(10,20) | 20 |
min(10,20) | 최소값 | Math.min(10,20) | 10 |
System.out.println("pow : " + Math.pow(2,3)); // 8.0 (2³)
System.out.println("sqrt : " + Math.sqrt(25)); // 5.0
회원가입, 게시글 작성 시 서버/DB가 자동으로 시간 기록.
사용자가 "지금" 입력하는 게 아니라 시스템이 현재 시간을 찍어줌.
| 구분 | Calendar (java.util) | LocalDateTime (java.time) |
|---|---|---|
| 특징 | 추상클래스, static 변수 사용 | 불변객체, 직관적 메서드 |
| 문제점 | 가독성/유지보수 안좋음 | 없음 (현대 표준) |
| 사용법 | Calendar.getInstance() | LocalDateTime.now() |
Calendar 예제
Calendar cal = Calendar.getInstance();
System.out.println("YEAR: " + cal.get(Calendar.YEAR)); // 2025
System.out.println("MONTH: " + (cal.get(Calendar.MONTH)+1)); // 12 (0부터 시작)
System.out.println("DAY: " + cal.get(Calendar.DAY_OF_MONTH)); // 23
LocalDateTime + 하위 클래스들
LocalDate date = LocalDate.now(); // 2025-12-23
LocalTime time = LocalTime.now(); // 09:48:01
LocalDateTime dt = LocalDateTime.now(); // 2025-12-23T09:48:45
// 날짜/시간 추출
System.out.println(dt.getYear()); // 2025
System.out.println(dt.get(ChronoField.MONTH_OF_YEAR)); // 12
System.out.println(dt.get(ChronoField.AMPM_OF_DAY)); // 0(오전)/1(오후)
// 특정 날짜 생성
LocalDate birth = LocalDate.of(2000, 11, 12);
LocalDateTime birthTime = LocalDateTime.of(2000, 11, 12, 15, 14, 10);
아래의 상황을 통해 Enum 타입이 왜 필요한가 확인해 봄
학년정보를 String classGrade로 저장하면:
Student s1 = new Student("hong1", "FIRST_GRADE");
Student s2 = new Student("hong2", "first_grade"); // 오타
Student s3 = new Student("hong3", "1학년"); // 한글
데이터 통제 불가. 컴파일러가 아무 에러도 안냄.
static final String c1 = "FIRST_GRADE";
static final String c2 = "SECOND_GRADE";
// 여전히 Student s3 = new Student("hong3", "1학년"); 가능
여전히 방어가 안됨.
enum ClassGrade {
FIRST_GRADE, SECOND_GRADE, THIRD_GRADE
}
class Student {
private String name;
private ClassGrade classGrade; // 타입 체크됨
Student(String name, ClassGrade classGrade) {
this.name = name;
this.classGrade = classGrade; // "1학년" 넣으면 컴파일 에러!
}
}
Enum 장점
ClassGrade.FIRST_GRADE로 의도 명확ClassGrade.FIRST_GRADE 값 고정LocalDateTime.now().get(ChronoField.YEAR); // 2025
LocalDateTime.now().get(ChronoField.AMPM_OF_DAY); // 0/1
Enum이 input으로 쓰이는 대표 케이스.
실무에서 데이터 무결성 지키려면 Enum 필수고, 시간은 LocalDateTime만 쓰면 됨!