본문 바로가기
개발자로 가는 길(국비지원과정)/1. Java

[210506목] Wrapper class, Exception

by 레아Leah 2021. 5. 6.
반응형

▶ Wrapper class

- 기초자료형을 객체화시킨 것 

- public 뒤에 final이 붙어있으면 상속불가

 

오늘 기억해야할 것 parse

 

[Integer]

MAX_VALUE 정수 중 최대값 

 

 

Integer 클래스의 리턴값이 int인 MIN_VALUE, Static Final

 

[박싱, 언박싱]

기본형 객체를 Wrapper로 바꿔주는 것을 박싱이라고 하고 반대로 Wrapper 클래스 타입의 값을 Primitive로 바꾸는 것을 언박싱이라고 한다.

 

▶ 박싱: 숫자가 객체가 되는 것 

Integer i3 = 11; 

값이 자동으로 객체가 되는 것 

 언박싱 : 객체가 자동으로 값으로 되는 것

int sum = i1 + i2; 

 

 

[double]

NaN : "Not a Number"의 약자이며, 스스로 숫자임을 부정하고 있다. 

NaN라면 True를 리턴, NaN이 아니면 False를 출력한다. 

static이 아니라는 것은 객체를 생성해야한다는 뜻

 

 

[parseDouble]

문자열 String tmp = "3.14"를 double형으로 변환

왜 출력값이 Infinity로 나오지? 

더보기

String tmp = "3.14"; 

double d = Double.parseDouble(tmp);

System.out.println(d/0);

String tmp = "3.14"; 

double d = Double.parseDouble(tmp);

System.out.println(d/0);

 

Infinity는 무한대 수치라는 의미이며, 수치의 값이 너무 크거나 작아서 유동 소수점 수치(floating point number)의 한계를 넘어 표현할 수 없을 때 값을 Infinity로 받는데, 양수 Infinity와 음수 -Infinity에 각각 해당한다.

 

 

 

String tmp에  E를 넣어도 E는 지수를 나타내기 때문에 에러가 나지 않고 출력된다. 

A는 숫자형이 아니기 때문에 Excetption이 뜬다.

Exception in thread "main" java.lang.Number.FormatException: 숫자 형식 오류 

 

★프로그래밍 언어에서는 앞에 is라는 글자가 붙게 되면 그것의 결과로는 True or False를 리턴하는 함수하고 기억! 

 

[isFinite]

셀 수 있는 수라면 True를 리턴하고, 셀 수 없는 수라면 False를 리턴한다. 

 

 

[오류 찾아보기]

Number.FormatException : 숫자 형식 오류 

ArithmeticException : 분모에 0이 들어가는 경우 발생하는 오류 

ArrayIndexOutOfBoundsException  : 배열의 크기가 오버되면 발생하는 오류 

e.getMessage() : 메소드를 출력하면 어떤 오류가 발생했는지 알 수 있다.

e.printStackTrace(); : 어디서 오류가 났는지 알려준다. 

 

 

 

[Exception] (예외)

object - Throwable - Exception - error

 

- Exception 또한 객체, object로부터 상속 받음, 처리 가능 

: catched Exception 반드시 처리해야할 오류 (IOException)

: uncatched Exception (RuntimeException) 잘 처리안함

- Error

: 예외처리의 개념프로그램을 더욱 안정적으로 처리하기 위해서이다.

 

systec 문법오류

Exception in thread "main"

 

parseInt() : 함수는 문자열인지 구문분석하여 특정 진수의 정수를 반환한다. (문자열 → 정수)

b가 더블형이라면 오류가 나지 않지만 이미 Integer 

b때문에 오류가 나는 것

 

 

<예외처리하는 문법>

더보기

try{

    예외 발생을 조사할 문장(Statement) 

    ...

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

   예외가 발생했을 때 실행시킬 코드; 

   ....

}

 

예외처리 순서 

① try 블록 안에서 예외가 발생라면 그 시점에서 코드의 실행을 중단한다.  

② 발생된 예외의 종류가 catch 블럭의 ( ) 안에서 지정한 예외와 일치하면 그 안의 코드를 실행시킨다. 

catch 블럭 안의 코드가 모두 실행되면 그 try~catch 블록 다음에 등장하는 코드를 실행시킨다. 

 

던져진(throw) 예외의 종류와 catch 블록 ( ) 안의 예외가 일치할 경우, 그 catch 블록 안의 코드가 실행됩니다. 

 

: catch는 여러개 사용할 수 있고, try에서 잡히지않으면 아부지를 데려오기 

개발 현장에서는 디테일하게 잡는 것을 좋아해 아부지는 맨 밑에다가 두기 

 

 

ArrayIndexOutOfBoundsException

배열 str의 개수는 5개이므로 index 방 번호는 0~4번까지인데 범위를 넘음

e.getMessage() : 메소드를 출력하면 어떤 오류가 발생했는지 알 수 있다.

e.printStackTrace(); : 어디서 오류가 났는지 알려준다. 

 

e.printStackTrace(); : 어디서 오류가 났는지 알려준다. 를 가장 맨 위에 사용하면 다른 예외처리 코드가 데드코드가 되기 때문에

가장 마지막의 예외코드 위치에 넣는다.  

 

 

 

 

[정수인 숫자 5개를 입력받아 합계를 구하는 프로그램을 작성하라]

[InputMismatchException]

정수가 아닌 문자열을 입력하면 오류가 발생한다. 

이 때 발생하는 오류가 InputMismatchException

3을 키보드로 받았다고 바로 input에 들어가는 것이 아니라 standardin으로 집어넣고 소진해서 input에 넣음 

데이터를 완충시키는 공간(standardin)이 따로 있음, 밑에 그림 참고! 

정수가 아닌 문자열 타입의 a가 들어가면 standardin으로 집어넣고 소진시키지 못하기 때문에 그 이후에 값을 넣지 못함.

해결방법은? 

 

keyin.nextLine(); 

: 입력 buffer, standardin을 지우는 역할 수행

 

 

[일반적코드]

그동안 수업시간에 자주 했던 코드 

 

 

[합계가 0이 나오면 예외, 예외 생성]

[throw와 throws 차이를 알아두기] 

 

출력하고 싶었는데 에러가 뜨네? 

throws Exception하는 경우는 권장하지 않는다. 

 

throw는 예외객체를 생성해서 밖으로 던지겠다 

throws는 예외객체를 밖으로 던진다 

add를 빠져나가는 것은 2가지 방법 

=> 정확한 경우, 에러가 발생한 경우 

 

throw Exception 던질거라고 알리는 것 

throws Exception 실제로 던지는 것 

 

throws Exception 예외를 해결하지 않고 던저버린다. 

던진 예외는 호출했던 쪽으로 

 

 

[FitnessService 예외처리]

내가 해 본 건 당연히 오류 

다시 해봤는데 되긴 됐다! 잘 이해하고 있다고 생각해도 될까? 

 

 

 

[컬렉션]: 자바에서 제공하는 자료구조

컬렉션의 계층도 (선형, 비선형)

- 선형: 순서가 있다. 배열(관리 어렵), AarrayList(배열의 단점을 보완, 중간에 데이터를 끼워 넣을 수 있음)

- 비선형 : 순서가 없다. 

- Map: 표처럼 생기고 관리(키와 밸류 쌍으로) 

 

ArrayList

Interface List<E>

: Element, Generic 

 

Sring[] arr;

List<String>arr ;

ArrayList 객체를 생성하면 ArrayList에서 사용 가능한 메소드가 주르륵 뜬다. 

 

 

add(E e); E는 객체 타입

 

List를 알아두면 메소드를 알기가 더 쉽다.

for문 기억해두기!

for(String tmp : list1)

System.out.println(tmp);

 

 

사용한 ArrayList 메소드

.size();  : 크기, 갯수 

.get(int index);  : index 첨자에 해당하는 값을 가져옴 

.add(int index, String element); : 원하는 위치에, 원하는 값을 넣어주기

.isEmpty() : ArrayList list1이 비어있는지 확인하는 함수 

.clear(); : 지우는 함수, 회원탈퇴시 사용 

.contains() : "문자열"을 포함하고 있는지 확인하는 함수 

.indexOf() : index, 첨자를 알려주는 함수 

.remove() : 위치를 알면 index, 값을 알면 원하는 값을 지울 수 있음 true or false

 

같은 데이터도 들어갈 수 있다. 이걸 막는 것이 set!(집합개념이기 때문에)

remove();  위치를 알면 index, 값을 알면 원하는 값을 지울 수 있음 

 

List에는 무조건 <객체>만 들어갈 수 있다.

반응형