9일차 수업 ( 예외처리 )

1. 예외 처리 

 일반적으로 프로그램 실행 중에 발생되는 의도하지 않은 문제를 의마하며 예외가 발생하면

프로그램은 비정상 종료된다. 이러한 현상을 방지하고 정상 종료되게 처리하는것을

예외처리 ( Exception Handling ) 이라고 한다.

 

<예외 처리 방법은 2가지>


a. try ~ catch
==> 예외가 발생된 곳에서 처리하는 방법.

 

try{

//예외발생코드

}catch(예외 클래스명 변수명){

}

위처럼 사용!

 

b. throws
==> 예외가 발생된 곳에서 하지 않고 호출한 곳으로 떠 넘기는 방법으로 main 메소드까지 떠 넘긴다.

굳이 throw 문을 사용 하는 이유는 아래와 같다.

 

 * 예외가 발생된 곳에서 그냥 try ~ catch 하면 네트워크 같은 상황에서는 사용자가 어떤 이유 때문에 원하는 결과가 안나왔는지 모른다. 따라서 throws 해서 사용자가 어디서 무슨 에러가 나왔는지 확인 할 수 있게 해야 한다.

 

====수업 내용======

 

1. 예외처리

가. 예외클래스 계층구조 파악

Object

Throwable

Exception

RuntimeException  IOException

하위클래스  하위클래스

==> API들은 어플리케이션에서 발생되는 모든 예외를 처리 가능하지 못하다. 범용적인 예외들만 처리가능하다.
detail한 예외처리는 사용자가 만들어서 처리해야 된다.
(사용자 정의 예외클래스)

* 사용자 정의 예외클래스
a. extends Exception
b. 문자열 하나 갖는 생성자.
   ==> 문자열은 예외 정보 저장시 사용된다.
c. 필요하면 여러 구성요소 추가 가능하다.
   ==> 사용자가 지정한 특정한 조건에 위배되었을 때.
   ( 문법적으로 문제 없다 )
   ex) 잔액부족
 검색을 했는데 데이터가 없는 경우,
 나이를 저장하는데 30이상,
 이메일 입력시 @를 입력 안하는 경우,

나. 예외처리 방법
==> 예외클래스 사용한다.
a. try ~ catch 문
==> 예외가 발생된 곳에서 처리하는 방법.

b. throws 문
==> 예외가 발생된 곳에서 하지 않고 호출한 곳으로 떠 넘기는 방법.
main 메소드까지 떠 넘긴다.
==> 주로 사용하는 이유
 : 예외가 발생된 곳에서 그냥 try ~ catch 하면 네트워크 같은 상황에서는 사용.
네트워크 같은 상황에서는 사용자가 어떤 이유 때문에 원하는 결과가 안나왔는지 모른다.
따라서 throws 해서 사용자가 예외 정보를 보게 해야 된다.

<주요 용도 2가지>

a. 사용자가 지정한 예외 조건.
- 사용자정의 예외 클래스가 필요
- 예외조건에 위배되면 예외를 발생시켜야 된다.
  throw new 사용자 정의 예외클래스(문자열);
- throws 하는 방법으로 예외처리한다.

b. 범용적인 예외 발생시 --> 사용자 정의 예외로 변경할 때

==> 0으로 나누었을 때 ArithmeticException 발생되고, 예외처리하고 예외정보 출력하면 /byZero 출력된다.
==>“0으로 나누어 예외 발생된”한국어로 된 예외로 다시 출력해야 된다.


ex)

0으로 나눔 ----> ArithmeticException 발생 ---> /byzero

==> 변경
0으로 나눔 --> ArithmeticException 발생 --> 예외처리(try-catch)--> 사용자 정의 예외클래스 발생.
 --> 사용자 정의 예외클래스 처리 --> “0으로 나누워 발생"

다. 예외 클래스의 종류 2가지

a. compile checked Exception
==> 컴파일시 예외처리 유무를 체크
 ( 만약에 예외처리가 안되어 있으면 컴파일 에러 발생)
==> IOException , SQLException 계열
특징 :
IO작업, SQL 작업과 관련된 메소드를 사용하는 경우에 반드시 예외 처리를 해야된다.
이유?  worker메소드에서 throws XXXException 한다.
따라서 caller 메소드에서는 try~catch해야된다.
안하면 에러 발생된다.


b. compile unchecked Exception
==> 컴파일시 예외 처리 유무를 체크안함
==> RuntimeException 계열
==> 실행할 때 발생되는 예외들이다.
==> 특징 : 예외처리할 필요가 없다.
    예외가 발생되지 않게 코드로 구현이 가능하기 때문이다.
개발자가 제대로 조건 체크했으면 에외발생 안되는 사항이다.
==> 따라서 예외 처리 할 생각 말고 조건 체크 잘해라!

2. 다중 데이터 처리

==> 대량의 데이터를 저장할 수 있는 방법

* 데이터 저장 방법
가. 변수

나. 배열
생성하면서 크기 지정해야 된다. (초기 사이즈)
따라서 데이터를 나중에 추가가 불가능하다. / 배열을 다시 생성해야 된다.

- 같은 데이터만 저장 가능하다. (다형성 제외 )
- 기본형 배열 사용 가능하다.
- 참조형 배열 사용 가능하다.
- 배열크기 : 배열명.length

다. 컬렉션 ( Collection )
- 생성만 하면 된다. 크기는 자동 증가/감소 된다.
- 서로 다른 데이터 모두 저장 가능하다.
- 저장 데이터는 참조데이터(클래스)만 가능하다.
- 기본형 저장 안되는 것이 아니고 Wrapper 클래스 사용하여 저장한다.

=> 결국 모든 데이터 저장 가능하다.
 - java.util 패키지에 존재하는 몇 개의 클래스 파일.
-컬렉션 크기 : 변수명.size()

* 크기(길이) ?

가. 문자열 길이
 str.length();
나. 배열 길이
 배열명.length
다. 컬렉션 길이
 변수명.size()
라. 파일크기


- 컬렉션의 계층구조

 Object

 << Collection >> - 인터페이스
  
<<Set>>    <<List>>
Hashset     ArrayList(****), Vector

: 데이터 중복안됨   : 데이터 중복 허용
: 데이터 순서없음   : 데이터 순서있음


* 제네릭( generic )
==> <>
==> <클래스형>을 지정해서 사용하는 방법

ex)
//일반적
ArrayList = list = new ArrayList();
==> 얻어 올 때 반드시 형변환 해야 된다.
==> 잘못된 데이터가 저장 될 수 있다.
 (실행시 파악할 수 있다. )

// Generic
ArrayList<저장할 클래스명> list = new ArrayList<>(); //JAVA 7부
==> 얻어 올 때 형변환 할 필요가 없다.
==> 잘못된 데이터를 컴파일 시점에 알 수 있다.

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

8일차 수업 ( 문자열 , 예외처리 )

1. 문자열 생성방법
. String 클래스 이용
- 한번 생성된 문자열은 변경안된다.
- 메소드를 사용하여 가공하면 새로운 문자열이 생성된다

따라서 문자열 조작이 적은 경우에 사용한다.

 

- 리터럴 이용
  > String str = "hello";
      String str3 = "hello";
   => literal pool 메모리에 생성된다.
      기존 문자열이 존자하면 재사용 한다.     
- new 이용
  > String str2 = new String("hello");
      String str4 = new String("hello");
   => heap 메모리에 생성된다. 매번 생성된다.
   - 메소드 정리

. StringBuffer 클래스 이용
- 한번생성된 문자열이 변경된다. 따라서 문자열 조작이 많은 경우에 사용된다.


   - new 이용
   > StringBuffer buffer = new StringBuffer("hello");

. toString 메소드 이용
=> 정수를 문자열로 변경
   String str = Integer.toStirng(123);
   String str2 = Float.toStirng(123.4F);

. + (연결 연산자) 이용
=> 문자열과 다른 데이터형이 + 만나면 자동으로 문자열로 변경된다.
 > System.out.println( 1 + 2 ); // 3
     System.out.println(1+ " " + 2); 1 2

     int x = 123;
     String str = x+""; // 권장 안함.
     String str2 = Integer.toStirng(123);
     String str3 = String.valueof(123);

 

<문자열의 다양한 처리방법>

 

  String str = "SJgood";
  
  //1. 모든 문자열을 대문자로 만들기
  System.out.println(str.toUpperCase());  //SJGOOD
  //2. 모든 문자열을 소문자로 만들기
  System.out.println(str.toLowerCase()); //sjgood
  //3. 문자열 부분 출력
  System.out.println(str.substring(0,2));  //SJ
  System.out.println(str.substring(2,6)); //good

 

2. 예외처리
예외( exception )?
=> 일반적으로 '에러'라고 부른다.
 ( '예외가 발생' 한다고 부른다. )
=> 예외가 발생되면 '프로그램이 비정상' 종료된다. (****)

>
 문장1;
 문장2;
 문장3;
 ...

 문장100;
 system.out.println("프로그램 정상종료");
 }.//end main

순차문이기 때문에 한번 실행된 문장을 다시 실행할 수 없다.
(반복문 제외)

 

<예외 처리 하는 방법>

Try ~ catch문 사용하기!
문법 :

 try{
     //예외발생코드
 }catch{예외클래스 변수명){
  //예외처리 코드
 }
* 다중 catch
- try 블럭안에 여러개의 문장이 지정 가능하다.
이 문장들이 서로 다른 예외가 발생가능하기 때문에 catch문도 여러개가 필요하다.

 try{
  문장1; => ArithmeticException
  문장2; => NullPointerException
  문장3; => ClassCastException
 }catch(ArithmeticException e){

 }catch(NullPointerException e){

 }catch(ClassCastException e){

 }

* finally
=> 예외가 발생유무와 상관없이 항상 실행되는 문장.
=> System.exit(0) 제외하고는 어떤 상황에서도 반드시 수행된다.
=> 주요용도: 파일 또는 데이터베이스와 같은 외부자원을 사용하고 close 하는 작업에 사용된다.


 try{

 }catch(){

 }finally{
 //반드시 수행되는 문장
 } 

 

====수업 내용======

 

1. 문자열 생성방법
가. String 클래스 이용
- 한번 생성된 문자열은 변경안되.ㅁ
  메소드를 사용하여 가공하면 새로운 문자열이 생성된다.
  따라서 문자열 조작이 적은 경우에 사용한다.
- 리터럴 이용
  예> String str = "hello";
      String str3 = "hello";
   => literal pool 메모리에 생성된다.
      기존 문자열이 존자하면 재사용 한다.     
- new 이용
  예> String str2 = new String("hello");
      String str4 = new String("hello");
   => heap 메모리에 생성된다. 매번 생성된다.
   - 메소드 정리
 
나. StringBuffer 클래스 이용
- 한번생성된 문자열이 변경된다. 따라서 문자열 조작이 많은 경우에 사용된다.
-
   - new 이용
   예> StringBuffer buffer = new StringBuffer("hello");
다. toString 메소드 이용
=> 정수를 문자열로 변경
   String str = Integer.toStirng(123);
   String str2 = Float.toStirng(123.4F);
라. + (연결 연산자) 이용
=> 문자열과 다른 데이터형이 + 만나면 자동으로 문자열로 변경된다.
 예> System.out.println( 1 + 2 ); // 3
     System.out.println(1+ " " + 2); 1 2
     int x = 123;
     String str = x+""; // 권장 안함.
     String str2 = Integer.toStirng(123);
     String str3 = String.valueof(123);
2. wrapper 클래스 : 기본형 데이터에 해당되는 클래스들의 묶음
기본형                         클래스
--------------------------------------
byte                            Byte
short    Short
int    Integer
long    Long
char    Character
float    Float
double    Double
boolean    Boolean
제공된 이유 : 기본형과 관련된 작업을 효율적으로 하기 위해서 제공됨
예> 숫자 --> 문자
    문자 --> 숫자
    int 범위 ?
    문자 대문자? 소문자?
3. 자동형변환
: 기본형  -------> Wrapper ( auto boxing )
  Wrapper -------> 기본형  ( auto unboxing )

4. Random 클래스
* 랜덤값 얻는 2가지 방법
가. Math.random();
0.0 <= <1.0
나. Random 클래스
: nextInt(n) ==> 0 ~ n-1 의 임의의 정수값 리턴
5. StringTokenizer 클래스
용도 : 특정구분문자로 분리된 통문자열에서 구분자를 기준으로 원하는 문자열을 얻는 방법
예> "홍길동 20 서울 " "
6. 날짜 데이터
Date
Calendar
7. 예외처리
- 예외( exception )?
=> 일반적으로 '에러'라고 부른다.
 ( '예외가 발생' 한다고 부른다. )
=> 예외가 발생되면 '프로그램이 비정상' 종료된다. (****)
예>
 문장1;
 문장2;
 문장3;
 ...
 문장100;
 system.out.println("프로그램 정상종료");
 }.//end main
순차문이기 때문에 한번 실행된 문장을 다시 실행할 수 없다.
(반복문 제외)
-예외처리를 담당하는 클래스가 제공된다. ( 예외 클래스 )
  Object
  Throwable
  Exception (
RuntimeException  IOException
NullPointerException  FileNotFoundException,
ArithmeticException
ArrayIndexOutbounds
ClassCastException
- 예외처리 방법 2가지
가. Try ~ catch문
문법 :
 try{
     //예외발생코드
 }catch{예외클래스 변수명){
  //예외처리 코드
 }
* 다중 catch문
- try 블럭안에 여러개의 문장이 지정 가능하다.
이 문장들이 서로 다른 예외가 발생가능하기 때문에 catch문도 여러개가 필요하다.
 try{
  문장1; => ArithmeticException
  문장2; => NullPointerException
  문장3; => ClassCastException
 }catch(ArithmeticException e){
 }catch(NullPointerException e){
 }catch(ClassCastException e){
 }
* finally 문
=> 예외가 발생유무와 상관없이 항상 실행되는 문장.
=> System.exit(0) 제외하고는 어떤 상황에서도 반드시 수행된다.
=> 주요용도: 파일 또는 데이터베이스와 같은 외부자원을 사용하고 close 하는 작업에 사용된다.

 try{
 }catch(){
 }finally{
 //반드시 수행되는 문장
 }
나. throws 키워드 이용
 
블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,