1. 예외처리 (2)
- 예외처리 미루기
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class PushExceptionTest {
public static void main(String[] args) {
try {
printFile("src/exercise/chapter_51/test.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
static void printFile(String filename) throws FileNotFoundException, IOException {//throw로 예외처리를 상위 메소드로 미룸
FileInputStream fs = getFileStream(filename);
int i;
while ((i = fs.read()) != -1) {
System.out.write(i);
}
}
static FileInputStream getFileStream(String filename) throws FileNotFoundException {
FileInputStream fs = new FileInputStream(filename);
return fs;
}
}
- Java Exception 직접 던지기->UncheckException 에서 CheckException으로 바뀜
public class ThrowUncheckException {
public static void main(String[] args) {
System.out.println("메인메소드 실행");
int myInt = 0;
int myInt2 = 0;
try {
myInt = getIntElement(10);
myInt2 = getDivide(0);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Int : " + myInt);
System.out.println("Int 2 : " + myInt2);
System.out.println("메인메소드 종료");
}
static int getIntElement(int index) throws Exception {
int[] arrInt = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
if (index >= arrInt.length) {
throw new Exception("인덱스 크기를 넘어섬");
}
return arrInt[index];
}
static int getDivide(int num) throws Exception {
if (num == 0) {
throw new Exception("0으로 나눌수 없음");
}
int data = 100 / num;
return data;
}
}
- 사용자 정의 예외
import exercise.chapter_51.exceptions.IDFormatException;
import exercise.chapter_51.exceptions.PositiveNumberException;
public class PTMember {
private String ID;
private String name;
private Integer height;
private Integer weight;
private String gender;
public PTMember(String name, Integer height, Integer weight, String gender) {
if (height < 0) throw new PositiveNumberException("Height must be positive"); //사용자 정의 exception에 메세지를 담아서 보냄
if (weight < 0) throw new PositiveNumberException("Weight must be positive");
this.name = name;
this.height = height;
this.weight = weight;
this.gender = gender;
}
public void setID(String ID) {
if (ID == null) throw new IDFormatException("ID cannot be null");
if (ID.length() < 8 || ID.length() > 20) throw new IDFormatException("ID must be between 8 and 20 characters");
this.ID = ID;
}
}
public class PositiveNumberException extends RuntimeException {
//RuntimeException을 상속받은 예외 클래스 생성
public PositiveNumberException(String message) {
super(message);
}
}
public class IDFormatException extends RuntimeException {
//RuntimeException을 상속받은 예외 클래스 생성
public IDFormatException(String message) {
super(message);
}
}
public class PTMemberTest {
public static void main(String[] args) {
PTMember member = new PTMember("민철", 178, 70, "Male");
member.setID("asasd"); // IDFormatException 출력("ID must be between 8 and 20 characters")
System.out.println(member);
}
}
1. 강력한 데이터 관리 (Enum, DateTime, Optional)
- 열거형 타입 : 특정 몇가지가 정해져 있는 타입 (4계절, 요일, 평가 등급 등등)
- enum을 이용해서 열거형 타입을 정해서 사용할 수 있음 (SCREAMING_SNAKE_CASE 사용)
- enum의 각 요소는 독립된 특수한 클래스로 구분되는 인스턴스이다.
- enum으로 선언하면 각 요소들이 heap에 객체 생성 및 참조
//enum 인스턴스 및 메소드 정의
public enum Day {
SUNDAY("일요일"),
MONDAY("월요일"),
TUESDAY("화요일"),
WEDNESDAY("수요일"),
THURSDAY("목요일"),
FRIDAY("금요일"),
SATURDAY("토요일");
private final String koreanName;
Day(String koreanName) {
this.koreanName = koreanName;
}
public String getKoreanName() {
return koreanName;
}
}
//enum 기본 사용법
public class DayTest {
public static void main(String[] args) {
Day monday = Day.MONDAY;
Day friday = Day.FRIDAY;
System.out.println(monday); //출력 : MONDAY
System.out.println(monday.getKoreanName()); //출력 : 월요일
System.out.println(friday); //출력 : FRIDAY
System.out.println(friday.getKoreanName()); //출력 : 금요일
Day day = Day.MONDAY;
switch (day) {
case MONDAY:
System.out.println("한주의 시작입니다");
break;
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
System.out.println("평일입니다");
break;
case FRIDAY:
System.out.println("오늘 지나면 주말");
break;
case SATURDAY:
case SUNDAY:
System.out.println("오늘은 주말");
}
}
}
- enum 메소드 사용하기
package exercise.chapter_52;
import java.util.Arrays;
public class DayEnumTest {
public static void main(String[] args) {
Day monday = Day.MONDAY;
Day sunday = Day.SUNDAY;
Day thursday = Day.THURSDAY;
//ordinal : enum의 몇번째 순서인지 반환, 배열의 인덱스와 비슷
System.out.println(monday.ordinal()); //출력 : 1
System.out.println(sunday.ordinal()); //출력 : 0
System.out.println(thursday.ordinal()); //출력 : 4
//compareTo : 각 요소와 차이를 반환
System.out.println(monday.compareTo(sunday));
//출력 : 1 -> monday(1) - sunday(0) = 1
System.out.println(monday.compareTo(thursday));
//출력 : -3 -> monday(1) - thursday(4) = -3
//values : enum의 전체 값 반환
Day[] days = Day.values();
System.out.println(Arrays.toString(days));
//출력 : [SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]
}
}
1. Java Optional 클래스 : Java8에서 도입된 null 방지 메소드 지원하는 wrapper 클래스
- orElseThrow : 사용자 정의 예외 던지기
- orElseGet : 기본값 사용하기
//try-catch 사용
public class StringNullThrowTest {
public static void main(String[] args) {
try {
String str = null;
System.out.println(str.length());
} catch (NullPointerException e) {
throw new CustomException("Custom Exception 발생");
}
}
}
class CustomException extends RuntimeException {
public CustomException(String message) {
super(message);
}
}
//Optional 사용
import java.util.Optional;
public class OptionalThrowTest {
public static void main(String[] args) {
String str = null;
Optional<String> stringOptional = Optional.ofNullable(str);
int length = stringOptional.orElseThrow(() -> {
throw new CustomException("Custom exception 발생");
}).length(); //try-catch와 같은 기능 구현
System.out.println(length);
}
}
public class StringNullDefault {
public static void main(String[] args) {
String str = null;
try {
int length = str.length();
System.out.println(length);
} catch (NullPointerException e) {
System.out.println("NullPointerException, use Default");
str = ""; //null포인터 예외 발생시 빈 String 삽입, length 0 출력
int length = str.length();
System.out.println(length);
}
}
}
import java.util.Optional;
public class OptionalDefaultTest {
public static void main(String[] args) {
String str = null;
Optional<String> optionalS = Optional.ofNullable(str);
int length = optionalS.orElseGet(() -> "").length();
System.out.println(length);
}
}
2. 날짜, 시간 데이터 타입
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeTest {
public static void main(String[] args) {
//현재시간 출력
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//특정 날짜 및 요일 가져오기
LocalDate past = LocalDate.of(2022, 12, 07);
System.out.println(past);
System.out.println(past.getDayOfWeek());
//날짜 포맷 바꾸기
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String dateStr = past.format(dateTimeFormatter);
System.out.println(dateStr);
}
}
#슈퍼코딩, #1:1관리형부트캠프, #백엔드, #backend, #백엔드공부, #개발공부, #백엔드개발자 #취준일기, #취준기록, #취뽀, #빡공, #HTML/CSS, #javascript, #react , #java, #spring