리우's IT Story
728x90
반응형


#️⃣ 프로그램 오류 종류

-> 프로그램이 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료되는 경우
 이러한 결과를 초래하는 원인을 에러 또는 오류 라고한다.
이를 발생시점에 따라 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()) 

728x90
반응형
profile

리우's IT Story

@LRWoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!