카테고리 없음

2024. 7. 15. (월) 슈퍼코딩 부트캠프 Day 37 / 주특기 4주차

태영9922 2024. 7. 15. 16:11

 

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