오늘의 과정 목록
- java.util 패키지
(날짜와 시간 처리에 대한 클래스 LocalDateTime 클래스)- java.io 패키지
- 제너릭, 열거형, 어노테이션, 람다식
+ API, Library, Framework의 차이점, Object란
LocalDateTime 클래스
LocalTime 클래스 - 시간 관리 클래스
LocalDate 클래스 - 날짜 관리 클래스
LocalDateTime 클래스 - 날짜 및 시간 관리 클래스
LocalTime localTime1 = LocalTime.now();
LocalTime localTime2 = LocalTime.of(9, 33, 20);
System.out.println(localTime1);
System.out.println(localTime2);
/*
출력 결과)
18:04:27.608937800
09:33:20
*/
LocalDate localDate1 = LocalDate.now();
LocalDate localDate2 = LocalDate.of(2023, 11, 30);
System.out.println(localDate1);
System.out.println(localDate2);
/*
출력 결과)
2023-07-20
2023-11-30
*/
LocalDateTime localDateTime1 = LocalDateTime.now();
LocalDateTime localDateTime2 = LocalDateTime.of(localDate2, localTime2);
System.out.println(localDateTime1);
System.out.println(localDateTime2);
/*
출력 결과)
2023-07-20T18:07:08.392384200
2023-11-30T09:33:20
*/
year = localDateTime1.getYear();
month = localDateTime1.getMonthValue();
dates = localDateTime1.getDayOfMonth();
int hour = localDateTime1.getHour();
int minute = localDateTime1.getMinute();
int second = localDateTime1.getSecond();
localDateTime2.minusYears(6).plusMonths(3).plusDays(10);\
System.out.println(localDateTime2);
localDateTime2 = localDateTime2.minusYears(6).plusMonths(3).plusDays(10);
System.out.println(localDateTime2);
/*
2023-11-30T09:33:20
2018-03-10T09:33:20
*/
localDateTime2 = localDateTime2.withHour(21).withMinute(10).withSecond(1);
System.out.println(localDateTime2);
/*
2018-03-10T21:10:01
*/
System.out.println(localDateTime1.isAfter(localDateTime2));
System.out.println(localDateTime1.isBefore(localDateTime2));
System.out.println(localDateTime1.isEqual(localDateTime2));
/*
true
false
false
*/
System.out.println(localDateTime1);
System.out.println(localDateTime2);
System.out.println(localDateTime1.until(localDateTime2, ChronoUnit.YEARS));
System.out.println(localDateTime1.getMonth()); // 열거. 숫자로 반환하지 않음.
/*
2023-07-20T18:15:00.783799100
2018-03-10T21:10:01
-5
JULY
*/
java.io 패키지
제너릭
1) 상속
class Result {
int code;
String message;
String name;
void print() {
System.out.println("안녕하세요");
}
}
class Result1 extends Result {
int age;
}
class Result2 extends Result {
String age;
}
class Result3 extends Result {
double age;
}
2) Object
class Result {
int code;
String message;
String name;
Object age;
void print() {
System.out.println("안녕하세요");
}
}
public class Generic {
public static void main(String[] args) {
Result result = new Result();
Object object = new Result();
// 공통 부모인 Object로 받았기 때문에 함께 중복으로 사용 가능.
result.age = "23"; // String 타입
result.age = 23; // Integer타입
// 지금은 age를 마지막으로 Integer타입으로 받았기 때문에 정상적으로 실행이 된것.
// 위의 타입을 반대로 받게 된다면 java.lang.ClassCastException 가 발생한다
int age = (Integer) result.age; // 다운캐스팅
System.out.println(age + 10);
/*
출력 결과)
33
*/
3) 제너릭
class Result<Type> {
int code;
String message;
String name;
Type age;
void print() {
System.out.println("안녕하세요");
<Parameter> void print(Parameter parameter) {
}
}
public class Generic {
public static void main(String[] args) {
Result<Integer> result1 = new Result<>();
result.age = 23;
4) 제너릭 제한
class Result<Type extends Comparable>
5) 제너릭 와일드카드
//참조변수에 값을 넣을 적에 어떤 타입이 올지 모르니 ?로 Integer로도, String으로도 받을 수 있다.
// 이렇게 하나하나 만들어야 하지만.
List<Integer> list = new ArrayList<Integer>();
List<String> list2 = new ArrayList<String>();
// new 생성자를 아무거나 받을 수 있다.
List<?> list3 = new ArrayList<Integer>();
list3 = new ArrayList<String>();
5-1) 제너릭 와일드카드 예시
입력 받은 숫자만큼 배열을 만든다.
만약 flag가 트루이면 요소 타입이 정수 형태로 들어가고, false이면 문자형태로 들어가게 된다.
public class Generic {
// List<? extends Comparable> -> Comparable의 하위 타입을 의미한다. (Upper Bounded Wildcard)
// List<? super Comparable> -> Comparable의 상위 타입을 의미한다. (Lower Bounded Wildcard)
List<?> createList(int number, boolean flag) {
if(flag) {
List<Integer> list = new ArrayList<Integer>();
for(int index = 0; index < number; index++) {
list.add(index);
}
return list;
} else {
List<String> list = new ArrayList<String>();
for(int index = 0; index < number; index++) {
list.add(Integer.toString(index)); // 문자열로 0 ~ 9
}
return list;
}
}
열거형 (enum)
enum Gender {
MALE, FEMALE
}
public class Etc {
static void printGenger(String gender) {
if(gender.equals("남")) {
System.out.println("남자입니다.");
}
if(gender.equals("여")) {
System.out.println("여자입니다");
}
}
static void printGenger(Gender gender) {
if(gender.equals(Gender.MALE)) {
System.out.println("남자입니다.");
}
if(gender.equals(Gender.FEMALE)) {
System.out.println("여자입니다");
}
}
static void printGenger(Gender gender) {
if(gender.equals(Gender.MALE)) {
System.out.println("남자입니다.");
}
if(gender.equals(Gender.FEMALE)) {
System.out.println("여자입니다");
}
}
public static void main(String[] args) {
printGenger("남");
printGenger("여");
// 같은 뜻이지만 다른 표현이 오면 출력 되지 않는다.
printGenger("남자");
// 고민 없이 선택 타입만 지정 할 수 있다.
printGenger(Gender.FEMALE);
}
}
/*
출력 결과)
여자입니다.
*/
어노테이션
@Override : 이 메소드가 슈퍼클래스의 메소드를 오버라이드하는 것임을 명시한다.
@Deprecated : 이 메소드가 더 이상 사용되지 않음을 명시한다.
(Integer i = new Integer(10); 와 같이 사용하지 않는 메소드를 표시해준다.)
@SuppressWarnings : 컴파일러 경고를 숨기기 위해 사용된다.
(노란색 줄로 표시되어 있는 컴파일러 경고)
람다식
API
Library
Framework
- 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조이며 개발에 있어서 뼈대, 틀 역할을 한다.
- 정해진 규칙에 따라 개발을 하도록 만들어 놓았으며 규칙에 어긋나며 개발에 어려움이 발생한다.
Object 클래스란
좋은 글 잘 읽었습니다, 감사합니다.