본문 바로가기
자바 , 기타 공부/자바 기초.1.04까지만

기초 3장 - > 예외처리 , 기타 class

by 임지혁코딩 2023. 12. 27.

컴파일 에러란? compile시 발생하는 error

런타임 에러 -> 실행시 발생 . 논리적 에러 -> 의도와 다른 동작. (고프 내용을 기억하자)

 

error와 예외의 차이는, 에러는 코드로 수습될 수 없는 오류이고, 예외는 코드로 수습될 수 있다 .

error를 control하는것은 힘들지만, 예외는 따로 처리해줘야한다 .

 

즉, 예외 처리란

프로그램 실행시 발생할수있는 예외에 대비한 코드를 작성하는 것이다. 

     try {
        //정상적인 행위
       
      } catch (Exception e) {
        // 예외로 처리한 경우에 따라서, 어떤 일을 할까
      }

 

이와 같으며, 동작 과정은 try 에서 예외가 발생한 경우, 해당 에외 catch qㅡㄹ럭을 확인.

찾게 되면, 그 catch 블럭을 수행하고 try-catch문을 빠져나와 다음 문장을 수행한다

예외가 없으면 try를 수행하고 바로 나온다. 

 

예외를 발생시키는 방법

     try {
        Exception e = new Exception("고의발생");
        throw e ;
       
      } catch (Exception e) {
        // 예외로 처리한 경우에 따라서, 어떤 일을 할까
        System.out.println("에러났음. 고의에러 ");
     
     }

 

1. 이와 같이 특정 예외를 지정하여, 예외에 따른 행동을 정의할수도 

2. ArithmeticExcpetion ae를 catch안의 변수로 넣어, 0/0시 할 일 등 이미 정의된 몇가지 에러에 대해 표현할 수 도 있다.

예외의 강제 발생은 throw e(excpetion 객체)로 가능하다. 

 

예외 클래스에는 예외처리를 선택가능한 프로그래머의 실수 예외인 RuntimeException , 사용자의 실수와 같은 외족 요인에 의해 발생하는 예외인 필수적 처리가 필요한 Exception class, 2종류가 있다. 

 

 

 

 

이 개념을 이해해야 한다. Exception은 예외의 최고 조상으로써, 모든 예외를 처리한다. 

그렇기 때문에 가장 마지막 catch블럭으로, 다 돌고 나서나머지 예외들에 적용되어야 한다. 

예외객체 ae에 접근할 수도 있다. -> 이를 통해 정보를 얻는다

ae.printStackTrace -> 예외발생시의 호출스택 메서드 정보, 예외 메세지 출력. 

try->catch->이후 finally 블럭을 추가하여, 예외 발생여부 관계없이 실행되는 문장을 넣을 수 있다.

 

void method() throws Exception 1 {}과 같이 예외 처리가 가능하다. 

이는 사실은 예외 처리라기보단 호출 메서드로 전달해주는 것이다. 해당 메소드에서 예외에 관련된 처리를 해야할때 사용하는 방법이다. 

 

 

이와 같이, 메소드의 구현 과정에서도 Exception을 생성하여, 매개변수가 잘못되었다거나 method 사용 과정에서 발생할 수 있는 예외들을 처리할 수 있다. 즉, 좀더 꼼꼼한 메소드 설계방식이 될 것이다 .

 

사용자 정의예외 

class MyException extend Exception과 같이, 예외를 상속받아 예외 클래스를 정의할수있다. 

 

 MyException(String msg, int errCode) { super(msg) ; Err_code = errcode; } //생성자

와 같이, 에러 코드값을 저장하는 자식 예외를 만들수도 있다

 

public class MyCustomException extends Exception {

    // 기본 생성자
    public MyCustomException() {
        super();
    }

    // 메시지를 받는 생성자
    public MyCustomException(String message) {
        super(message);
    }
}

 

-> 해당 예시 , 내가 exception을 정의하고, 이걸 이후에 throw new MyCustomExeption 으로 해서, catch(MycustomException me)로 받아서 예외 처리할 수 있다. 

 

--new로 throw하고, 그 인스턴스의 명을 catch에서 정의하는 구조에 주의  

 

예외 A가 throw B를 통해 예외 b를 발생시켰다면, A를 B의 원인 예외라고 하며 ,이렇게 체인 형식으로 예외를 발생시키고 처리할 수 있다. 

 

 

9장 - 다양한 class 들 

 

1. Object

  앞서 배운적이 있지만, 모든 클래스의 초고 조상으로써 11개의 메서드만을 가지고 있다 . 

 clone(), getclass(),toString() 등등 . 

equals -> p1.equals(p2) //object에 있는 method지만, object가 최고조상, 자식들은 모두 사용 가능하다. 

equals같은 경우에는, 객체 주소를 비교한다.

**주의 ** string 객체의 경우에는, 그 값을 비교한다. 기본적인 object의 equals는 주소까지 비교하지만, 

그 자식에서는 overriding(조상님 올라탈게요!)되어 string에선 변경된 것.  

 

str1.hashcode() -> 객체의 내부 주소를 반환하다 -> 36965 이럲게 

 

card c1 = new Card() ; c1.toString() -> 객체의 정보가, 문자열로 변경된다. 

 

getClass -> 자신이 속한 클래스의 모든 정보를 가지고 있는 class객체를 반환한다. 

Class cobj = c1.getClass(); 

 

2. String

string도 문자열로써 마치 type처럼 사용하지만, 자바에서 객체처럼 사용됨을 1장에 배웠고, 이걸 기억하자 .

String instance, String a = "a"시, 이를 바꿀 수는 없다. 

 

즉, 기본적으로 string의 공간에 값을 할당하거나, 혹은 새로운 공간을 만들어줄 수 있다.

(이는 string 이 class이기 떄문에 가능하다 ) 

 

빈 문자열은 String str =""로 생성가능하다, char c = ""는 불가능하다. 

 

_추가 메소드 . 

 s.indexof('아싸') > 3 // s.length() -> 길이 6 // animals.split(",",2)  지정된 수 (2)만큼 자른다. 

 

문자열과 기본형 간의 변환

1. 기본 -> 문자열 : INT I = 100; String str = String.valueof(i); 

2. 문자열 - > 기본형 : int i = Integer.parseInt("100") or Integer.valueOf("100") 

 

3. StringBuffer

 문자형 배열 char[]를 가지나 내용을 변경할수 있다 .

ab.append("123"): 과 같이 . 인스턴스 생성시 배열 크기를 좀 충분히 잡아주자 . 

equals가 overridding 되지 않았다. 즉 그 주소에 따라 비교한다 .

 

4. Math 

아주아주 사용되는 것이 많지만 , 그때그때 사용하는것이 현명하다고 생각한다.

math.ceil(10,2) 혹은 Math.min(9.5,9.50000) 과 같이 사용할 수 있다. 

 

10 . 날짜 / 시간

sql에서 sysdate를 기억하자! 이 처럼 날짜와 date를 사용하는 방법을 활용해보자 . 

Date, Calendar 과 같은 클래스가 존재한다. 

calendar는 추상 class. 생성후 Calendar cal = Calendar.getInstance() ; 등으로 사용한다

Calendar.year() , 이와 같이 DATE,MONTH,HOUR,SECOND 등이 필드로 있다. 

 

Calendar date1 = Calendar.getInsatnce(); 

date1.set(2017,7,15) //8월로 들어간다. date1.clear(Calendar.SECOND)// 초를 초기화 . 

이런식으로 초기화하고 삽입하여 날짜시간등을 객체에 넣고 사용한다. 

 

DATE->형식을 다르게 출력할때는 

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd")

String result = df.format(today) ; 등으로 변환한다. 

 

Calendar가 진화한, time package가 있다. 이는 불변으로 사용된다 (String처럼) 

LocalDate, LocalTime, LocalDateTime등으로 표현범위 지정. 

 

현재 시간을 얻어올때는 , LocalDate.now() // 특정 시간시 of(1999,12,31)처럼 얻어옴. 

 

-> 날짜 부분에 대해서는 사용하는 경우에 따라 추가적으로 학습하는 것이 현명하다고 판단했다. 

'자바 , 기타 공부 > 자바 기초.1.04까지만' 카테고리의 다른 글

쓰레드, 프로세스  (2) 2023.12.28
기초 4 -> 제너릭, 열거 ,어노테이션  (0) 2023.12.27
기초 2장 -> 객체 지향  (1) 2023.12.26
기초 1장  (0) 2023.12.26