Tip
1. 웹 사이트 만들때 코레일 참조
2. 무슨 예외인지 확인하고 싶을 때 - getMessage()
** 프로그램에서의 오류
1. Error
1) 물리적 에러 : 언어가 제공하는 문법에 맞지 않게 코드를 작성하여 컴파일러가 번역하지 못해 실행하지 못하는 현상
ex) .java를 가지고 .class 파일을 생성하지 못함(IDE에서 빨간색 밑줄, 수정해서 실행해야함)
2) 논리적 에러 : 문법에 맞게 작성되어 컴파일러 번역도 정상수행, but 결과가 의도와는 다르게 나오는 현상
=> 알고리즘의 문제일 가능성이 높음 - 코드의 실행과정과 메모리의 값을 확인(Debugging)
=> 대다수의 IDE는 이러한 작업에 대한 기능을 제공
=> 논리 오류 방지를 위해 white box 테스트(구조)를 해봐야 함
2. Exception(예외)
=> 문법에 맞는 코드 작성 및 컴파일러 번역, 실행이 되지만 특수한 상황을 만나면 프로그램이 오류를 발생
=> 개발자가 코드로 방지 가능한 예외, 개발자가 코드로 방지할 수 없는 예외가 있음
=> 서버개발 : 예외 발생시 계속 수행하게 하거나, 로그를 기록하여 동일한 예외가 발생하지 않도록 조치(예외처리)
3. Assertion(단언)
=> 프로그램의 안전성을 위하여 특정 조건을 만족하지 않을시 프로그램에 예외를 발생시켜 종료시키는 것
** Eclipse에서의 Debugging
1. break point : Debug 모드로 실행할 때, 프로그램의 실행을 일시 중단 하도록 해주는 포인트
=> eclipse에서는 gutter에서 마우스 오른쪽 클릭 후, break point 메뉴 선택
2. 실행시 Run대신 Debug 메뉴를 이용하여 실행
=> 디버그 모드로 전환할 것인지 묻고, 디버그 모드로 전환되면 메뉴가 변경
=> 메모리 내용, 스레드 등을 보여주는 창이 화면에 출력, 메뉴에는 실행한 메소드 내부에 진입할지 계속진행할지등
의 아이콘이 화면에 보여짐
** 예외처리 -Exception Handling
1. 예외 처리의 목적
1) 예외가 발생하더라도 프로그램을 계속 실행하도록 하기 위해
2) 예외가 발생했을 때 예외 내용을 기록하기 위해
2. 예외처리 방법
1)예외가 발생한 곳에서 처리
2)예외를 호출한 곳으로 던져서 처리
3. try ~catch
=> 예외처리를 위해서는 try ~catch 사용
1) 형식 : try{ 예외 발생 가능성이 있는 구문
}catch(예외처리 클래스이름 변수명){처리할 구문
}finally{예외 발생 여부에 상관없이 수행할 구문}
2) 규칙
=> try가 나오면 catch나 finally 둘 중에 하나는 반드시 나와야 함
=> catch 클래스를 변경해서 여러개 작성 가능
=> finally는 생략되거나 1번만 나와야 함
=> try구문안에서 예외가 발생하지 않으면 catch 구문은 수행되지 않고 finally로 넘어감
try구문 예외 발생시, 예외와 일치하는 catch 구문을 찾고 일치하는 곳이 있으면 finally, 없으면 프로그램 중
단 or finally로 넘어감
=> try와 catch, finally는 별로의 블록으로 try에서 반든 변수를 catch, finally에서 사용 불가
3) 주의할 점
=> 여러종류의 예외를 처리하고자 하는 경우에는 구체적인 예외 클래스명을 사용하지 않고 Exception사용
상위클래스타입의 참조형 변수에 하위클래스타입의 인스턴스의 참조를 대입할 수 있음(대다수는 Exception 상속)
catch 구문이 여러개일때 Exception을 마지막이 아닌곳에 사용시 타 catch문의 도달이 불가하여 에러발생
4. 예외의 강제 발생
=> throw new 예외 클래스명(String msg);
=> 강제로 예외를 발생시켜 메시지출력 or 프로그램 중단을 목적으로 사용 - Assertion대신 이 방식 권장
5. 예외를 호출한 곳으로 던지기
=> 예외발생시, 메소드 내부에서 처리하지 않고, 메소드를 호출한 곳으로 전달하여 메소드를 호출한 곳에서 처리하
도록 하는것
=> 메소드명(매개변수) throw 예외클래스명{메소드명};
이경우 메소드 내부에서 예외 클래스에 해당하는 예외 발생시 메소드를 호출한 곳에서 처리하도록 함
=> 자바에서 메소드 호출시 예외처리를 강제시키는 경우 사용
=> 파일 입출력, 네트워크 입출력, 데이터베이스 입출력을 할때는 거의 대부분 예외처리를 강제
(이 경우 예외처리를 처음부터 하는 것이 좋고, 타 언어로 작업시에도 예외처리를 해주는 것이 좋음)
=> 데이터 자료형 변환하는 경우 Runtime Exception이라서 예외를 처리하지 않아도 되지만 하는 것이 좋음
스마트폰의 경우 입력 상자에 키보드 종류를 선택할 수 있어 하지 않는 경우가 많았으나, 최근 물리적인 키보드를
연결하여 사용가능하기에 유효성 검사 or 예외처리 해주는 것이 좋음
=> 콘솔 프로그램 제작시 숫자를 입력 받는 경우는 거의 없고, 문자열을 입력 받아 숫자로 변환
6. 사용자 정의 예외클래스
=> 사용자가 예외 클래스를 생성 가능
=> Exception 클래스를 상속받아서 제작
=> 강제로 예외를 발생시키기위해 사용
7. try - resources 구문
=> 자바가 생성하지 않은 리소스를 사용시, 리소스 사용후 반드시 close()를 호출하여 정리해야함
=> try(리소스 생성){ 내용; } : try내부에서 만든 resource는 try구문이 끝나면 자동으로 정리(close 호출X)
=> jdk 1.7 부터 사용가능
**Java.leng 패키지
=> java의 기본 패키지
=> import하지 않아도 import한 것으로 간주
=> 이 패키지의 클래스는 클래스 명 만으로 사용
1. Object 클래스
1) 자바의 최상위 클래스로 자바의 모든 클래스는 이 클래스로 부터 상속
2) 이 클래스는 인스턴스를 직접 생성 X
(object clone(): 인스턴스를 복제해주는 메소드, 재정의해서 사용 cloneable라는 인터페이스를 implements 해
서 clone 메소드를 구현했다는 것을 알려줌)
3) 인스턴스를 = 를 이용해서 대입하면 인스턴스의 참조가 복사됨
4) 인스턴스 참조 복사시 동일한 내용을 2개 변수가 가리키는 것이됨
5) 하나의 변수가 세부내용 변경시 타 변수에게도 영향을 주게됨
6) 인스턴스를 다른 변수에 대입시, 인스턴스의 내용을 가지고 새로운 인스턴스를 안들어 그 인스턴스의 참조를 넘김
(이경우 자바에서는 clone이라는 메소드를 이용하는 것을 권장)
(응용프로그램에서 원본 데이터로 작업을 수행하는 것은 문제발생시, 원본으로 돌아가지 못하는 경우가 발생
(응용 프로그램에서는 원본과 동일한 내용의 복사본으로 작업을 수행, 작업이 끝나면 원본에 반영하는 형태로 동작)
=> boolean equals(Object obg) => 인스턴스의 내용이 같은지 비교하는 메소드, 재정의 해서 사용
"==" 연산자는 기본형인 경우 값을 비교하지만 참조형인 경우는 기리키고 있는 것이 같이 비교하는 것
이때 참조형이 소유하고 있는 데이터가 같은지 비교하고자 할 때는 이 메소드를 재정의해서 사용하는 것이 일반적
int hashcode() : 숫자로 된 데이터를 리턴하는데 재정의 하여 사용가능한 메소드
=> String toString() : 인스턴스를 문자형으로 표현하여 리턴하는 메소드
- 비 재정의 시, 클래스명과 해시코드를 하나로 묶어서 리터, 출력하는 메소드에 인스턴스명을 대입시 결과출력
- 대다수의 언어가 이러한 메소드를 가지고 있음
- 모든 인스턴스를 문자열로 저장하고자 하면 이 메소드를 호출
- 데이터 만을 저장해서 사용하는 클래스에서 이 메소드를 재정의시 디버깅이 편리
=> weak copy(약한 복사) : 내부의 데이터를 바로 복사
=> deep copy(강한 복사) : 내부의 데이터가 참조형이면 데이터를 다시 복제
=> java는 복제를 할 때 clone 메소드를 사용하는 것을 권장
(clone 메소드는 리턴타입이 자기자신이고, 매개변수는 없음)
=> Object 클래스는 자바의 최상위 클래스
자바의 모든 클래스는 Object 클래스로부터 상속 받음
상위 클래스 타입으로 참조형 변수에는 하위 클래스 타입의 인스턴스의 참조를 대입할 수 있음
(Object 클래스 타입으로 만들어진 변수는 모든 데이터를 대입 받을 수 있음)
ex) Object ?= 어떤 종류의 데이터든지 대입이 가능;
Object 타입으로 리턴된 데이터 사용시 원래 자료형으로 강제 형변환 하여 사용해야함(출력만 하는 경우 형변환X)
오늘의 퀴즈!
Bubble Sort(인접) - 인접한 값들끼리 비교하여 변경
장점 : 중간에 완료된것을 알수 있음(선택정렬보다 좋음 - 무조건 끝까지 가야함)
초기 값 : 30 40 10 50 20
1Pass : 30 10 40 20 50
2Pass : 10 30 20 40 50
3Pass : 10 20 30 40 50
4Pass : 10 20 30 40 50
'수업 정리' 카테고리의 다른 글
14일차 수업 정리(String, Encoding, Sort & Search ) (0) | 2020.04.24 |
---|---|
13일차 수업정리(java.lang 패키지) (0) | 2020.04.23 |
11일차 수업 정리(Nested Class, Singleton, Sort) (0) | 2020.04.21 |
10일차 수업 정리(Package, Import, 상속, 다형성, 재정의) (0) | 2020.04.20 |
9일차 수업정리(module, Recursion, Constructor) (0) | 2020.04.17 |