📌Back-End/Java
Java 예외 처리, 컬렉션 프레임워크
구 일
2024. 4. 24. 23:17
728x90
반응형
예외 (Exception)
정상적이지 않은 Case
- 0으로 나누기
- 배열의 인덱스 초과
- 없는 파일 열기
- 등...
예외 처리 (Exception Handling)
정상적이지 않은 Case에 대한 적절한 처리 방법
try { } catch (예외 case 1) { } catch (예외 case 2) { } |
int a = 0; try { a = 5 / 0; } catch (ArithmeticException e) { System.out.println(e); } |
finally
예외 발생 여부와 관계없이 항상 실행되는 부분
try { 예외가 발생할 수도 있는 부분; } catch (예외 case 1) { 예외 case1이 발생해야 실행되는 부분; } finally { 항상 실행되는 부분; } |
throw, throws
throw : 예외를 발생 시킴
throws : 예외를 전가 시킴
.... 함수이름 () { throw new Exception(); } .... 함수이름() throws Exception { } |
컬렉션 프레임워크(Collection Framework)
여러 데이터를 편리하게 관리할 수 있게 만들어 놓은 것
- 자료 구조 및 알고리즘을 구조화
대표 인터페이스
- List 인터페이스, Set 인터페이스, Map 인터페이스
List 인터페이스
순서가 있는 데이터의 집합
데이터 중복 허용
대표 구현 클래스
- ArrayList
- LinkedList
- Vector
ArrayList list1 = new ArrayList(); LinkedList list2 = new LinkedList(); Vector v = new Vector(); |
Set 인터페이스
순서가 없는 데이터의 집합
데이터의 중복 허용 하지 않음
대표 구현 클래스
- HashSet
- TreeSet
HashSet set1 = new HashSet(); TreeSet set2 = new TreeSet(); |
Map 인터페이스
키와 값의 쌍으로 이루어진 데이터 집합
순서를 유지 하지 않음
대표 구현 클래스
- HashMap
- TreeMap
HashMap map1 = new HashMap(); TreeMap map2 = new TreeMap(); |
import java.util.LinkedList;
import java.util.Scanner;
public class Main5 {
public static void main(String[] args) {
System.out.println("[===== 예외 처리, 컬렉션 프레임워크 =====]");
// 콘솔에서 사용자로 부터 숫자를 입력받아 음식을 주문하는 프로그램
order();
}
/**
* 주문
*/
public static void order() {
int selectNum = 0; // 메뉴 선택
int count = 0; // 수량
boolean run = true; // 반복문 종료를 위한 변수
LinkedList<MenuInfo> list = new LinkedList<>();
Scanner sc = new Scanner(System.in);
while (run) {
try {
System.out.println("[===== 주문 시작 =====]");
System.out.println("햄버거를 선택해주세요.");
System.out.println("1. 불고기버거 5000원, 2. 새우버거 4500원");
selectNum = Integer.parseInt(sc.nextLine());
System.out.println("수량을 입력해주세요.");
count = Integer.parseInt(sc.nextLine());
if (selectNum == 1) {
list.add(new MenuInfo("불고기버거", 5000, count));
} else if (selectNum == 2) {
list.add(new MenuInfo("새우버거", 4500, count));
} else {
System.out.println("번호를 다시 확인해주세요.");
order();
}
System.out.println("음료를 선택해주세요.");
System.out.println("1. 콜라 2000원, 2. 사이다 2000원");
selectNum = Integer.parseInt(sc.nextLine());
System.out.println("수량을 입력해주세요.");
count = Integer.parseInt(sc.nextLine());
if (selectNum == 1) {
list.add(new MenuInfo("콜라", 2000, count));
} else if (selectNum == 2) {
list.add(new MenuInfo("사이다", 2000, count));
} else {
System.out.println("번호를 다시 확인해주세요.");
order();
}
System.out.println("디저트를 선택해주세요.");
System.out.println("1. 아이스크림 1000원, 2. 선택안함");
selectNum = Integer.parseInt(sc.nextLine());
if (selectNum == 1) {
System.out.println("수량을 입력해주세요.");
count = Integer.parseInt(sc.nextLine());
list.add(new MenuInfo("아이스크림", 1000, count));
}
if (selectNum != 1 && selectNum != 2) {
System.out.println("번호를 다시 확인해주세요.");
order();
}
System.out.println("주문 종료 하시겠습니까?");
System.out.println("1. 종료, 2. 다시 주문");
selectNum = Integer.parseInt(sc.nextLine());
if (selectNum == 1) {
run = false;
} else {
order();
}
} catch (NumberFormatException e) {
// 예외 발생 시 처리
// 숫자가 아닌 다른 값 입력 시 처리
System.out.println("[ERROR] 숫자만 입력해주세요.");
} finally {
// 예외가 발생하거나 예외가 발생하지 않아도 무조건 실행되는 코드
System.out.println("[===== 주문 종료 =====]");
}
}
sc.close();
print(list);
}
/**
* 계산 후 출력
* @param list 주문리스트
*/
public static void print(LinkedList<MenuInfo> list) {
int total = 0; // 총액
// 향상 for문 (foreach)
for (MenuInfo menuInfo : list) {
total += menuInfo.price * menuInfo.count;
System.out.printf("[%s] %8d원\n", menuInfo.name, menuInfo.price * menuInfo.count);
}
System.out.println("----------------------");
System.out.printf("총 %10d원입니다.", total);
}
/**
* 음식 정보
*/
static class MenuInfo {
String name; // 이름
int price; // 가격
int count; // 수량
public MenuInfo() {}
public MenuInfo(String name, int price, int count) {
this.name = name;
this.price = price;
this.count = count;
}
}
}
728x90
반응형