#️⃣ 프로그램 오류 종류
-> 프로그램이 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료되는 경우
이러한 결과를 초래하는 원인을 에러 또는 오류 라고한다.
이를 발생시점에 따라 1️⃣ 컴파일 에러와 2️⃣런타임 에러로 나눌 수 있다.
1️⃣ 컴파일 에러 : 컴파일 시에 발생하는 에러
2️⃣ 런타임 : 실행시에 발생하는 에러
-----------------------------------------------
3️⃣ 논리적 에러 : 컴파일도 되고 실행도 잘되지만 의도한 것과 다르게 동작하는 것을 말한다.
💡 소스코드를 컴파일하면 컴파일러가 소스코드 .java에 대해 오타나 잘못된 구문, 자료형 체크 등
기본적인 검사를 수행하여 오류가 있는지 알려준다.
💡 컴파일러가 알려준 에러들을 모두 수정해서 컴파일을 성공적으로 마치고 나면, 클래스파일 .class가 생성되고 생성된 클래스 파일을 실행할 수 있게되는 것이다.
#️⃣ 에러와 예외의 차이
*️⃣ 에러 (error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
ex) OutOfMemoryError (메모리부족 ) , StackOverflowError
*️⃣ 예외 (exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
-> 예외는 발생하더라도 프로그래머가 이에대한 적절한 코드를 미리작성해 놓음으로써
미연에 방지할 수 있다.
💡 오류, 예외 전부 Object 클래스의 자손들이다.
💡 모든 예외의 최고 조상은 Exception 클래스이다.
#️⃣ Exception클래스를 상속받는 대표적인 예외 클래스
1️⃣ IOException
2️⃣ ClassNotFoundException
3️⃣ RuntimeException
#️⃣ 예외처리를 하는 이유
🚩 예외 발생으로 인한 실행 중인 프로그램의 갑작스런 비정상적인 종료를 막고,
정상적인 실행상태를 유지하도록 하는 것.
#️⃣ try-catch문의 구조
-------------------------------------------------------
try {
//예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Excetion1 e1) {
// Exception1이 발생했을 경우, 이를 처리하기위한 문장을 넣는다.
} catch (Excetion2 e2) {
// Exception2이 발생했을 경우, 이를 처리하기위한 문장을 넣는다.
} catch (ExcetionN eN) {
// ExceptionN이 발생했을 경우, 이를 처리하기위한 문장을 넣는다.
}
-------------------------------------------------------
➡️ 하나의 try 블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나이상의 catch 블럭이 올 수 있으며,
이 중 발생한 예외의 종류와 일치하는 단 하나의 catch블럭만 수행된다. 발생한 예외의 종류와 일치하는
catch 블럭이 없으면 예외는 처리되지않는다.
💡 try 블럭 또는 catch블럭 내에 또다른 try -catch 문이 포함될 수도 있다.
모든 catch블럭에 참조변수 e하나만 사용해도 된다.
#️⃣ try-catch문의 실행순서
➡️ try 블럭 내에서 예외가 발생한 경우,
1️⃣ 발생한 예외와 일치하는 catch 블럭이 있는지 확인 .
2️⃣ 일치하는 catch 블럭을 찾게 되면, 그 catch 블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서
그다음 문장을 계속해서 수행한다. (만일 일치하는 catch 블럭을 찾지 못하면, 예외는 처리되지 못한다.)
➡️ try 블럭 내에서 예외가 발생하지 않은 경우,
catch 블럭을 거치지 않고, 전체 try-catch문을 빠져나가서 수행을 계속한다.
#️⃣ try-with-resource문(자동 자원반환)
➡️ JDK1.7부터 try-with-resources문이라는 try-catch문의 새로 추가되었다.
이구문은 주로 입출력(I/O)과 관련된 클래스를 사용할 때 유용하다.
try {
///
}catch (Exception e) {
///
} finally {
try{
///
} catch (Exception e) {
///
}
➡️ finally 블럭안에 try-catch문을 추가해서 close()에서 발생할 수 있는 예외를 처리하도록 변경하면
코드가 복잡해져서 보기 좋지않다 더 나쁜 것은 try블럭과 finally블럭에서 모두 예외가 발생한다면
try블럭의 예외는 무시된다는것인데. 이러한 점을 개선하기 위해 try-with-resources문이 추가된것이다.
*️⃣ try-with-resources문의 괄호() 안에 객체를 생성하는 문장을 넣으면, 이 객체는 따로 close()를 호출하지 않아도 try 블럭을 벗어나는 순간 자동적으로 close()가 호출된다. 다음에 catch블럭 또는 finally 블럭이 수행된다.
*️⃣ try-with-resourcecs문에 의해 자동으로 객체의 close()가 호출될 수 있으려면,
클래스가 AutoCloseable이라는 인터페이스를 구현한 것이어야한다.
ex)
public interface AutoCloseable {
void close() throw Exception;
}
#️⃣ Object, String 클래스 메서드중 모르는거 체크해두기
➡️ Object 클래스의 멤버들은 모든 클래스에서 바로 사용이 가능하다.
#️⃣ 잘모르는 메서드 간단하게 개념정리 (Object)
*️⃣ clone() : 객체 자신의 복사본을 반환한다.
*️⃣ getClass() : 객체 자신의 class 정보를 담고있는 Class인스턴스를 반환한다.
#️⃣ 잘모르는 메서드 간단한게 개념정리 ( String 클래스의 생성자와 메서드)
*️⃣ String (String Buffer buf) : StringBuffer인스턴스가 갖고있는 문자열과 같은내용의 String인스턴스를 생성
StringBuffer sb =
new StringBuffer("Hello");
String s = new String(s); 실행 후 : s="hello"
*️⃣ char charAt(int index) : 지정된 위치에 있는 문자를 알려준다.
*️⃣ String concat(String str) : 문자열(str)을 뒤에 덧붙인다.
*️⃣ boolean endsWith(String suffix) : 지정한 문자열(suffix)로 끝나는지 검사한다.
*️⃣ boolean equalsIgnoreCase(String str) : 문자열과 String 인스턴스의 문자열을 대소문자 구분없이 비교한다.
*️⃣ int indexOf(int ch) : 주어진 문자(ch)가 문자열에 존재하는지 확인하여 위치(index)를 알려준다. 못찾으면 -1
*️⃣ int indexOf(String str) : //
*️⃣ int lastIndexOf(int ch) :
*️⃣ // (String str) : 지정한 문자를 문자열의 오른 쪽 끝에서부터 찾아서 위치를 알려준다. 못찾으면 -1
*️⃣ String replaceFirst(String regex , String replacement) : 문자열 중에서 지정된 문자열과 일치하는 것을
새로운 문자열로 모두 변경한다.
*️⃣ static String valueOf(자료형) : 지정된 값을 문자열로 반환한다.
#️⃣ String Buffer/StringBuilder 개념과 메서드 정리
*️⃣StringBuffer
➡️ String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만
StringBuffer클래스는 가능하다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며
그 크기를 지정할 수 있다. 이때 버퍼의 길이를 충분히 잡아주는 것이 좋다.
➡️ StringBuffer 클래스는 char형 배열의 참조변수를 인스턴스로 선언해놓고 있다.
StringBuffer 인스턴스가 생성될 때, char 형 배열이 생성되며 이때 생성된 char형 배열을 인스턴스 변수 value 가 참조하게 된다.
*️⃣ StringBuilder
StringBuffer는 쓰레드 동기화에 대해 성능을 떨어뜨린다. 그래서 동기화만 뺀 StringBuilder가 새로추가되었다. StringBuffer와 똑같은 기능
#️⃣ Math 기본 메서드 정리
➡️ Math클래스의 생성자는 접근제어자가 private 메서드는 모두 static/
상수만 2개 정의 E = 자연로그 밑 , PI = 3.14
*️⃣ 랜덤 : random()
*️⃣올림 : ceil()
*️⃣ 버림: floor()
*️⃣ 반올림: rint() = 반환값이 double , round()
#️⃣ 래퍼클래스
➡️ 객체지향 개념에서 모든것은 객체로 다루어져야한다.
➡️ 8개의 기본형을 대표하는 Wrapper 클래스/ 이클래스를 이용하면 기본값들을 객체로 다룰 수 있다.
*️⃣ Boolean
*️⃣ Character
*️⃣ Byte
*️⃣ Short
*️⃣ Integer
*️⃣ Long
*️⃣ Float
*️⃣ Double
💡 생성자의 매개변수로 문자열을 제공할때 각 자료형에 알맞은 문자열 사용!
*️⃣ 오토박싱
-기본형 값을 래퍼클래스의 객체로 자동변환해주는것
➡️ JDK1.5부터 도입된 오토박싱기능때문에 반환값이 기본형일 때와 레퍼클래스의 차이가 없어졌다.
️⃣ 언박싱
-반대로 변환 하는것.
#️⃣ Random클래스 정리
Math.random()은 내부적으로 Random클래스의 인스턴스를 생성해서 사용하는 것
둘 중 편한 것을 사용하자 .
double randNum = Math.random();
double randNum = new Random().nextDouble(); //위 문장과 동일
#️⃣ 정규식 표현 정리
➡️ 텍스트 데이터 중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것
1️⃣ 정규식을 매개변수로 Pattern클래스의 static 메서드인 pattern compile (String regex)을 호출하여
pattern 인스턴스를 얻는다 .
Pattern p = Pattern.compile("c[a-z]");
2️⃣ 정규식으로 비교할 대상을 매개변수로 Pattern클래스의 Matcher matcher (CharSequence input)를
호출해서 Matcher 인스턴스를 얻는다.
Matcher m = p.matcher(data[i]);
3️⃣ Matcher 인스턴스에 boolean matches()를 호출해서 정규식에 부합하는지 확인한다.
if(m.matches())
'JAVA기초' 카테고리의 다른 글
Thread(쓰레드) 개념정리 / 간단한 예제로 다뤄보기 (2) | 2023.09.06 |
---|---|
최근5개의 명령어를 보여주는 예제로 Queue 이해하기 (0) | 2023.09.02 |
CollectionFramework - LinkedList (2) | 2023.08.21 |
컬렉션 프레임워크 - ArrayList 복습, 개념정리(자바의정석) (0) | 2023.08.20 |
소켓프로그램 (ip출력해서 서버와 클라이언트 단방향 통신하기) (0) | 2023.06.27 |