본문 바로가기
Java

2024_06_04_화

by 알케니브 2024. 6. 4.

수업교재 10] 자바 예외 처리

2)예외의 개요

3) 예외 Class의 계층 구조

Object

  • Throwable
    • Exception
      • IOException
      • RuntimeException
    • Error
      • OutOfMemoryError

5) 예외를 처리하는 방법

  • Throw

수업교재 11] 제네릭과 컬렉션

1) 컬렉션

  • 컬렉션: 다수의 데이터, 즉, 데이터 그룹을 의미함
  • 컬렉션 클래스: 다수의 데이터를 저장할 수 있는 클래스  ex) Vector, ArrayList, HashSet
  • 프레임웍: 표준화, 정형화된 체계적인 프로그래밍 방식
  • 컬렉션 프레임웍
    • 데이터 군을 저장하는 클래스들을 표준화한 설계
    • 다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스들로 구성
    • JDK 1.2부터 제공

2) ⭐⭐⭐⭐⭐컬렉션 프레임웍

⭐⭐⭐⭐⭐List

set

⭐⭐⭐⭐⭐Map: 

3) 컬렉션 클래스와 제네릭

메소드 설명
int size()  
boolean isEmpty()  
   
   
   
   
   

 

4) 컬렉션 List 인터페이스

  • List 구조는 Sequence라고도 함
  •  
  • 배열은 크기가 고정되어 있는 것, 컬렉션은 가변적인 길이를 가진다

5)컬렉션 List 배열의 단점

  1. 크기를 변경할 수 없다
  2. 비순차

6) ⭐⭐⭐Linked List (면접 질문으로 나옴)

 

7) ⭐⭐⭐Stack (기사 시험으로 나온다

  • 객체를 후입선출,  last in first out구조(맨 마지막에 넣은 것이 제일 먼저 나옴)이다
  • cf) Queue구조: 선입선출 구조

 

 

 

 


혼자공] 11강 기본 API 클래스(P488 ~ P540)

11- 1) java-lang 패키지

0) java.lang 패키지란?: 자바 프로그램의 기본저인 클래스를담고 있는 패키지

1) java.lang 패키지에 속하는 주요 클래스

주요 클래스 용도
Object 자바 클래스의 최상위 클래스로 사용
System - 표준 입력 장치(키보드)로부터 데이터를 입력받을 때 사용
- 표준 출력 장치(모니터)로 출력하기 위해 사용
- 자바 가상 기계를 종료할 떄 사용
- 쓰레기 수집기를 실행 요청할 때 사용
(쓰레기 수집기 garbage collector: 동적으로 할당된 메모리들 가운데 더이상 사용하지 않는 메모리(인스턴스)를 찾아서 자동으로 수집해서 쓸모없는 메모리를 해제하는 기법
Class 클래스를 메모리로 로딩할 떄 사용
String 문자열을 저장하고 여러가지 정보를 얻을 때 사용
Wrapper Byte, Short, Character, Interger, Float, Double, Boolean, Long - 기본 타입의 데이터를 갖는 객체를 만들 때 사용
- 문자열을 기본 타입으로 변환할 때 사용
- 입력값 검사에 사용
Math 수학 함수를 이용할 때 사용  

 

2) equals(): Object 클래스의 equals()메소드는 비교 연산자인 ==과 동일한 결과를 리턴한다

3) 객체 해시코드(hashCode()): 객체 해시코드란 객체를 식별하는 하나의 정수값을 말하며 두 객체가 동등한지 비교함

4) 객체 문자정보(toString()): toString() 메소드는 객체의 문자 정보(객체를 문자열로 표현한 값)를 '클래스이름@16진수해시코드'로 리턴한다

5) Class 클래스 객체 얻는 법

Class clazz = 클래스이름.class
Class clazz = Class.forName("패키지...클래스이름")
Class clazz = 참조변수.getClass();

↳ 1번과 2번은 객체 없이 클래스 이름만 가지고 Class 객체를 얻는 방법

 

Class clazz = String.class;
Class clazz = Class.firName("java.lang.String");
String str = "감자바";
Class clazz = str.getClass();

↳ 3번은 클래스로부터 객체가 이미 생성되어 있을 경우에 사용하는 방법

위의 세 가지 방법으로 Class 객체를 얻고, Class메소드를 이용해 클래스의 전체 이름과 간단한 이름 그리고 패키지 이름을 얻어 출력함

 

6) String 클래스:

  • 자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리됨
  • 어던 생성자를 이용해서 String 객체를 생성할지는 제고외는 매개값의 타입에 달려있다

7) String 메소드:

리턴 타입 메소드 이름(매개 변수) 설명
char charAt(int index)  
boolean equals(Objects anObject)  
byte[] getBytes()  
byte[] getBytes(Charset charset)  
int indexOf(String str)  
int length()  
String replace(CharSequence target,
CharSequence replacement)
 
String substring  

 


혼자공] 10강 예외 처리 (P466 ~ P485)

10- 1. 예외 클래스

0) 예외란?: 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
예외가 발생되면 프로그램이 종료된다는 점에서 에러와 비슷하지만, 예외는 예외 처리 exception handing를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있음

1) 예외 클래스: 

  • 자바에서는 예외를 클래스로 관리하며, JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성하여 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해줌
  • 모든 예외 클래스는 java.lang.Exception 클래스를 상속받음

2) 예외의 종류

  • 일반 예외exception: 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 자바 소스를 컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사함, '컴파일러 체크 예외'라고도 불림
  • 실행 예외 runtime exception: 실행시 예측할 수 없이 갑자기 발생, '컴파일러 넌 체크'라고도 불림

3) 실행 예외

  • NullPointerException: 객체 참조가 없는 상태, 즉 null 값을 같는 참조 변수로 개체 접근 연산자인 도트(.)를 사용했을 떄 발생함, 객체가 없는 상태에서 객체를 사용하려 했으니 예외가 발생하는 것
  • ArrayIndexOutBoundException: 배열에서 인덱스 범위를 초과할 경우 발생
  • NumberFormatException: 문자열로 되어있는 데이터를 숫자로 변경하는 경우에 자주 발생
    ex) 
리턴 타입 메소드 이름(매개 변수) 설명
int Integer,parselnt(String s) 주어진 문자열을 정수로 변환해서 리턴
double Double.parseDouble(String s) 주어진 문자열을 실수로 변환해서 리턴

 

  • ClassCastException: 타입 변환Casting은 상위 클래스와 하위 클래스 간에 발생하고 구현 클래스와 인터페이스 간에도 발생하며, 이러한 관계가 아니라면 클래스는 다른 타입으로 변환할 수 없음, 이러할 때 발생하는 예외

10- 2. 예외 처리

1)예외 처리 코드

try-catch-finally 블록: 생성자 내부와 메소드 내부에서 작성되어 일반 예외와 실행 예외가 발생할 경우 예외 ㅊ리할 수 있도록 해줌

 

1)예외 처리 코드

try-catch-finally 블록: 생성자 내부와 메소드 내부에서 작성되어 일반 예외와 실행 예외가 발생할 경우 예외 리할 수 있도록 해줌

try

  • try 블록에는 예외 바생 코드가 위치한다
  • try 블록의 코드가 예외 발생 없이 정상 실행되면 catch 블록의 코드는 실행되지 않고 finally 블록 코드를 실행함
  • 만약 try 블록의 코드에서 예외가 발생하면 즉시 실행을 멈추고 catch 블록으로 이동하여 예외 처리 코드를 실행한 뒤, finally 블록의 코드를 실행함

finally

  • finally 블록은 생략 가능함, 필수 블록은 아님
  • 예외 발생 여부와 상관없이 항상 실행할 내용이 있을 경우에만 finally 블록을 작성하면 되며, 예외 발생 유무와 상관없이 무조건 수행
  • try 블록과 catch 블록에서 return문을 사용하더라도 finally 블록은 항상 실행됨

2) 예외 종류에 따른 처리 코드

  • 다중 catch: 예외 별로 예외 처리 코드를 다르게 하기 위해 사용하는 코드, try 블록에서 catch 블록의 예외가 발생하면catch 블록을 실행하도록 되어 있다
    catch 블록이 여러 개라 할지라도 단 하나의 catch 블록만 실행되는데, 그 이유는 try 블록에서 동시 다발적으로 예외가 발생하지 않고, 하나의 예외가 발생하면 즉시 실행을 멈추고 해당 catch블록으로 이동하기 때문

3) 예외 떠넘기기

 throws 키워드

  • 작성방법: class 예외 클래스이름 extends Exception
  • 메소드 선언부 끝에 작성되어 메소드에서 처리하지 안은 예외를 호출한 곳으로 떠넘기는 역할을 함
  • throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열함

오늘의 코딩

기억해야 하는 단축어: LinkedList나 Iterator 같은 단어 완성전에 자동완성 키(ctrl+spac)를 눌러야 맨 위에 import값이 생긴다

 

<ch10>

  • throw: 메소드 선언부 끝에 작성되어 메소드에서 처리하지 안은 예외를 호출한 곳으로 떠넘기는 역할을 함
  • Error: 실행 중 일어날 수 있는 치명적 오류, 컴파일 시점에 체크할 수 없으며 오류가 발생하면 프로그램을 비정상 종료함
  • Exception: Error보다 비교정 경미한 오류, try-catch를 이용해 프로그램의 비정상적인 종료를 막을 수 있음 
  • try/catch: 예외를 처리하기 위한 구문, 
    try 문에서 Exception 예외가 발생할 경우 catch (Exception e)로 빠져서 그 안의 실행문을 실행함
    finally 블럭은 try-catch문과 함께 예외 발생 여부와 관계없이 "항상, 무조건" 실행되어야 할 코드를 적으며 필수는 아니고 마지막에 선택적으로 덧붙여 사용함
    예외 발생시에는 try-> catch-> finally 순으로 발생하지 않은 경우 try-> finally 순으로 실행됨
    • 예외가 try 블럭에서 발생한 경우
      1. 발생한 예외와 일치하는 catch 문이 있는지 확인 
      2. 일치하는 catch 문이 있다면 catch 블럭 내의 문장을 모드 실행하고 try-catch 문을 빠져나가서 그 다음 문자을 수행 
      3. 일치하는 catch 문이 없다면 예외는 처리되지 못하고 에러 발생
    • 예외가 try 블럭 안에서 발생하지 않은 경우
      : catch 블럭을 거치지 않고 전체 try-catch 문을 빠져나가서 수행을 계속한다
    • 예외가 try 블럭 밖에서 발생한 경우: 예외는 아무 처리되지 못한 채 에러 발생 
  • Exception e: Error 범용 처리, 여기서는 어떤 Exception이 걸려도 여기서 처리가 된다
  • ⭐⭐⭐IOException: 입출력 작업 중에 발생하는 예외, 파일이 존재하지 않거나 파일에 접근할 수 없는 경우 등의 입출력 관련 오류시 발생
  • RuntimeException: https://blog.naver.com/PostView.naver?blogId=mk1126sj&logNo=220976674605
    • ClassNotFoundException: 프로그램 실행 중 객체를 생성할 때 클래스를 찾지 못하면 발생하는 Exception
    • ArithmeticException: 정수를 0으로 나누기하면 발생하는 에러
    • IndexOutOfBoundException: 리스트와 같은 자료형 객체의 범위를 벗어난 색인(Index)를 사용하는 경우에 발생
  • NumberFormatException: 숫자형 포맷 오류 발생, 문자를 숫자로 변경을 시도하다가 에러가 발생하는 경우
  • e.getMessage: 에러의 원인을 간단하게 출력함
public void run() {
		for( int i = 0; i < 5; i ++) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();

순서

ch10_ex01>> throw, try/catch 하는 법, Exception에 대하여

  • Exception01>> Exception e
  • Exception02
  • Exception03>> NumberFormatException, ArithmeticException
  • Exception04
  • Exception05
  • Exception07

ch10_ex02

  • Throw01
  • Throws02

ch10_ex03

  • Ex01>>RuntimeException
  • Ex02>>FileNotFoundException e
  • Ex03

ch10_ex04

  • MyException>> 개발자가 만들 수 있는 예외(Exception)//방송보고 선생님 주석 추가하기
  • MyExceptionEx01

<ch11>

ch11_ex01 >> List계열(수업교재 11 제네릭과 컬렉션 참고)(

  • ArrayList01 >>중복값인 구렁2와 순서 눈여겨보기, List의 역할: 중복을 허용하고 순서를 유지하는 객체
  • ArrayList02>> 순서 유지하며 중복을 허용하는 List계열, Stack구조
package ch11_ex01;

import java.util.ArrayList;

public class ArrayList02 {

	public static void main(String[] args) {
		// 순서 유지하며 중복을 허용하는 List
		
		ArrayList<String>	list = new ArrayList<>();
		list.add("수박");
		list.add("사과");
		list.add("바나나");
		list.add("수박");
		list.add("대추");
		list.add("바나나");
		System.out.println("갯수: " + list.size());
	//	System.out.println("list ->" + list);
		devPrint(list);	
		//debPrint(list)를 치고 커서대서 프린트 메소드화하기
		//옛날버전 Java는 이게 제대로 출력이 안됨
		// 1번 자리에 끼워넣기가 가능함
		//배열처럼 사용 가능하지만 배열은 아님! 원소의 집합이다
		// 0	1	2	  3	  4	  5	
		//수박 사과 바나나	수박 대추 바나나
		list.add(1,"키위");
		devPrint(list);
		list.set(4, "복숭아");
		devPrint(list);
		list.remove(0);	//0번째를 remove
		devPrint(list);
		System.out.println("3번 인덱스 --->" + list.get(3));
		System.out.println("바나나 문의 : " + list.contains("바나나"));
		System.out.println("바나나 문의 : " + list.indexOf("바나나"));
		System.out.println("바나나 문의 : " + list.lastIndexOf("바나나"));
		for (int i = 0 ; i < list.size(); i++ )	{
			if (list.get(i).equals("바나나"))	{
				list.set(i, "딸기");		//모든 바나나를 딸기로 교체
			}
		}
			
		
	}

	private static void devPrint(ArrayList<String> list) {
		// 알아서 파라메타화 됨
		// 필요하다면 메소드를 추가할 수 있다
		for ( String str : list) {
			System.out.print(str + "\t"); 
			
		}
		System.out.println("\n-----------------------");
		
		
	}

}
  • ArrayList03>>실무에 쓰는 로직!
package ch11_ex01;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayList03 {

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("사과");
		list.add("바나나");
		list.add("귤");
		list.add("오렌지");
		list.add("바나나");
		
		System.out.println("요소의 개수-->" + list.size());
		System.out.println(">> Iterator 객체로 요소 열기 <<");
		Iterator<String> elements = list.iterator();		
		//IT에 커서대고 ctrl+space
		while(elements.hasNext())	//요소가 있다면
			System.out.println(elements.next()+"\t"); //요소를 얻어내어 출력
		System.out.println("\n");
		
		System.out.println(">>get 메소드로 요소 얻기 <<");
		for(int i=0; i<list.size(); i++)
			System.out.println(list.get(i)+"\t");
		System.out.println();
		

	}

}
  • StackEx01>> stack, push, pop: 데이터를 넣는 순서
  • LinkedListEx01>> 
  • Car
  • CarEx01
  • VectorEx01

 


오늘의 과제

ch10_ex01

  • Exception_Hw01
public class Exception_Hw01 {

	public static void main(String[] args) {
    	int  result = 0;
    	int  num1   = 0 ;
    	int  num2   = 0;
		Scanner sc = new Scanner(System.in);

		do {
			try {
				System.out.println("첫번째 숫자 입력하세요");
				num1 = Integer.parseInt(sc.nextLine());
				if ( num1 == 0 ) break;
				System.out.println("두번째 숫자 입력하세요");
				num2 = Integer.parseInt(sc.nextLine());
					result = num1 / num2;
					System.out.printf("%d / %d  = %d\n ", num1, num2 , num1 / num2);
			} catch (Exception e) {
				// TODO: handle exception
			}

    	} while(true);
		
    	System.out.println("프로그램 종료");
    	
		sc.close();
	}

}
//결과값

//첫번째 숫자 입력하세요
//aa
//나머지 Error
//난 무조건 나온다
//프로그램 종료

//첫번째 숫자 입력하세요
//12
//두번째 숫자 입력하세요
//0
//숫자만  가능 합니다 ㅎㅎ 
//난 무조건 나온다
//첫번째 숫자 입력하세요
  • (MyExceptionEx02+ MyExceptionEx0201) + MyExceptionEx0202
//1. run as로 최소급여 입력 후 나오는 결과
java MyExceptionEx01 num1
사장님 100만원 보다 적어요!! 이게 뭡니까?

//2. run as로 최대급여 입력 후 나오는 결과
java MyExceptionEx02 num1
사장님 1000만원 넘 많아요, 좀 적당히 합시다

//3. run as로 정상급여 입력 후 나오는 결과
java MyExceptionEx02 num1
정상실행

//4. 잘못된 수행(ex.급여를 안 넣었을때)
java MyExceptionEx02 num1
실행 매개값의 수가 부족합니다
[실행 방법]
java MyExceptionEx2 num1

'Java' 카테고리의 다른 글

2024_06_10_월  (0) 2024.06.10
2024_06_05_수  (0) 2024.06.05
2024_06_03_월  (0) 2024.06.03
2024_05_31_금  (0) 2024.05.31
2024_05_30_목  (0) 2024.05.30