Notice
Recent Posts
Recent Comments
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

개발지식 먹는 하마 님의 블로그

[내일배움캠프 7일차] _ 탐욕법, 제네릭, 람다, 스트림, JFrame 본문

내일배움캠프 (CS25)

[내일배움캠프 7일차] _ 탐욕법, 제네릭, 람다, 스트림, JFrame

devhippo 2025. 2. 25. 20:19

그리디 알고리즘(탐욕법) 문제를 하나 풀이했다.
Java의 제네릭, 람다, 스트림, JFrame에 대한 내용을 정리했다.

프로젝트의 요구사항을 명세하고, level1 수준을 콘솔로 구현했다.


📚 학습 내용 정리

  • 탐욕법 

https://devhippo.tistory.com/67

 

1931번 - 회의실 배정

✏️ 문제 풀이어떤 자료형을 사용할 것인가?동적 or 정적 배열?우선순위에 따라 데이터 정렬하기어떻게 탐색을 진행할 것인가? 1) 어떤 자료형을 사용할 것인가?시간의 최댓값은 2의 31-1이다.int

devhippo.tistory.com

 

  • 제네릭, 람다, 스트림, JFrame

https://devhippo.tistory.com/68

 

Java - 제네릭 (Generic)

제네릭 Genericc++의 Template과 동일한 역할을 한다.타입을 미리 지정하지 않고 유연하게 사용이 가능하다.예를 들어 두 개의 변수를 더하는 메서드를 작성한다고 할 때,제네릭을 사용하면 정수형

devhippo.tistory.com

https://devhippo.tistory.com/69

 

Java - 람다(Lambda) & 스트림(Stream)

람다 Lambda익명 클래스를 더 간결하게 표현하는 문법코드를 더 짧고 가독성 높게 작성할 수 있다.( 매개변수 ) -> { 실행 코드 }함수형 인터페이스 (추상 메서드가 하나만 존재하는 인터페이스) 에

devhippo.tistory.com

https://devhippo.tistory.com/70

 

Java - GUI JFrame

JFrameJava Swings 라이브러리에서 지공하는 GUI 창을 생성하는 클래스이다.클래스 생성 시, superclass를 JFrame으로 지정한다.지정하지 못한 채 클래스 생성 시, 직접 extends JFrame을 입력한다. 화면 좌표

devhippo.tistory.com

 

요구사항 명세

기능 요구사항

ID 요구사항 설명 우선순위
FR-001 입력값 2개, 사칙연산 기호 입력 두 개의 숫자와 연산 기호를 입력할 수 있어야 한다. 높음
FR-002 연산 결과 출력 연산 후 결과값을 화면에 표시해야 한다. 높음
FR-003 무한 반복 계산 exit 문자열 입력 전까지 무한 계산이 가능해야 한다. 높음
FR-004 오류 처리 오류 발생 시, 해당 내용을 정제하여 출력해야 한다. 높음
FR-005 연산 수행 메서드 사칙연산을 수행하고 결과값을 반환하는 메서드를 포함해야 한다. 높음
FR-006 연산 결과 저장 연산 결과를 컬렉션 타입으로 저장해야 한다. 중간
FR-007 변수 private 선언 내부 변수는 private으로 선언하여 캡슐화를 유지해야 한다. 중간
FR-008 결과 삭제 저장된 결과들 중 가장 먼저 저장된 데이터를 삭제할 수 있어야 한다. 중간

예외처리 요구사항

ID 예외 상황 처리 방식
EX-001 0으로 나누기 "0으로 나눌 수 없습니다." 메시지 출력
EX-002 0을 포함한 양의 정수가 아닌 경우 "0을 포함한 양의 정수만 입력 가능합니다." 메시지 출력
Ex-003 연산기호 또는 exit가 아닌 경우 "잘못된 입력입니다." 출력

이 정도로 Level1~2의 요구사항을 명세해보았다.

 

실제 구현

요구사항 1) Scanner를 사용하여 양의 정수 2개를 전달받기

//요구사항 - scanner를 사용해서 양의 정수 2개를 전달받기
System.out.print("계산할 2개의 정수를 입력해주세요 : ");
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
if(num1 < 0 || num2 < 0){
    throw new IllegalArgumentException("0을 포함한 양의 정수만 입력 가능합니다.");
}

 

요구사항 2) Scanner를 사용하여 사칙연산 기호를 전달받기

//요구사항 - scanner를 사용하여 사칙연산 기호를 전달받기
System.out.print("연산기호(+, -, *, /) 또는 exit(종료)를 입력해주세요 : ");
String operator = scanner.next();

 

요구사항 3) exit 문자열 입력 전까지 계산기 무한 동작

 //요구사항 - 반목문을 사용하되 exit 문자열을 입력하기 전까지 무한으로 계산을 진행하도록 함
 if(operator.equals("exit")) {
    //exit를 입력 받은 경우 반복 종료
    break;
}

 

필수 기능) 입력 값이 사칙 연산에 해당하는지 확인하기

int result = 0;
switch (operator) { //입력받은 문자열이 사칙연산인지 아닌지 확인
	case "+":
		result = num1 + num2;
		break;
	case "-":
		result = num1 - num2;
		break;
	case "*":
		result = num1 * num2;
		break;
	case "/":
		result = num1 / num2;
		break;
	default:
		//사칙연산기호가 아닐 때, 오류 던지기
		throw new IllegalArgumentException("연산기호에 해당하지 않습니다." + operator);
}

 

요구사항 4) 연산 결과 출력하기

//요구사항 - 양의 정수 2개와 사칙연산 기호를 사용해 연산을 진행한 후 결과값 출력
System.out.println(result);

 

요구사항 5) 오류 발생 시, 오류 내용 정제 후 출력

//요구사항 - 연산 오류가 발생할 경우 해당 오류에 대한 내용을 정제 후 출력
catch (InputMismatchException e){
	//정수가 잘못 입력된 경우
	System.out.println("오류: 잘못된 정수 값입니다.");
	scanner.nextLine(); //입력 버퍼 리셋
} catch (ArithmeticException e) {
	// 0으로 나누는 경우
	System.out.println("오류: 0으로 나눌 수 없습니다.");
} catch (IllegalArgumentException e) {
	// 사칙연산에 해당하지 않는 입력일 경우
	System.out.println("오류: 잘못된 입력입니다 ->" + e.getMessage());
} catch (Exception e) {
	// 기타 예외 처리
	System.out.println("알 수 없는 오류 발생: " + e.getMessage());
}

 


 학습하며 겪었던 문제점

특정 조건에서 예외 던지기

throw new 오류(오류 메세지)

if(num1 < 0 || num2 < 0){
    throw new IllegalArgumentException("0을 포함한 양의 정수만 입력 가능합니다.")               
}

new를 빼먹지 말 것!


⭐ 내일 학습할 것

1. 프로젝트 Level1 구현 결과 튜터님께 피드백 받기
    exit를 입력받을 때, 일단 사칙연산 입력하는 곳에 적어놓기는 했는데 저렇게 하라는게 맞는지 질문하기
    exit를 따로 입력 받도록 변경할 경우 exit가 아닌 경우에는 그냥 아무 값이나 입력해도 되도록 설정하는게 맞는건지

2. Level1 GUI 기반 구현하기

   숫자 버튼, 사칙 연산, "=" 버튼, 닫기 버튼, 텍스트 창

3. 코딩 테스트 문제 풀기