본문 바로가기

TIL

231017_TIL

오늘한일

  • 자바공부- 예외 발생과 try-catch, finally문, Wrapper 객체,  쓰레드에 대해 공부하였다.

 

 

(배운점 정리)

 

예외처리의 흐름

1. 우리가 예외를 어떻게 정의하고,

2. 예외가 발생 할 수 있음을 알리고,

3. 사용자는 예외가 발생 할 수 있음을 알고 예외를 핸들링하는지 

 

package fourthJava;

class OurBadException extends Exception {
    public OurBadException() {
        super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
    }
}

package fourthJava;

class OurClass {
    private final Boolean just = true;

    // 신규 문법 throws!
    public void thisMethodIsDangerous() throws OurBadException {
        if (just) {
            // 신규 문법 throw!
            throw new OurBadException();
        }
    }
}

 

 

package fourthJava;

public class StudyException {
    public static void main(String[] args) {
        OurClass ourClass = new OurClass();

        try {
            // 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
            // "시도" 해보는 코드가 들어가는 블럭입니다.
            ourClass.thisMethodIsDangerous();
        } catch (OurBadException e) {
            // 2. 예외가 발생하면, "잡아서" handling 합니다.
            // 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
            // 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
            // 예외가 발생한 줄에서 바로 코드 실행을 멈추고
            // 여기 있는 catch 블럭 내의 코드가 실행됩니다.
            System.out.println(e.getMessage());
        } finally {
            // 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
            // 무조건 실행되는 코드가 들어가는 블럭입니다.
            System.out.println("우리는 방금 예외를 handling 했습니다!");
        }

    }
}

쓰레드

쓰레드는 프로세스내에서 일하는 일꾼(코드실행의 흐름)이라고 생각하면 됩니다.

 

  • 쓰레드의 생성
    • 프로세스가 작업중인 프로그램에서 실행요청이 들어오면 쓰레드(일꾼)을 만들어 명령을 처리하도록 합니다.
  • 쓰레드의 자원
    • 프로세스 안에는 여러 쓰레드(일꾼)들이 있고, 쓰레드들은 실행을 위한 프로세스 내 주소공간이나 메모리공간(Heap)을 공유받습니다.
    • 추가로, 쓰레드(일꾼)들은 각각 명령처리를 위한 자신만의 메모리공간(Stack)도 할당받습니다
  • Java 쓰레드- 일반 쓰레드와 동일하며 JVM 프로세스 안에서 실행되는 쓰레드를 말합니다.
    • Java 프로그램을 실행하면 앞서 배운 JVM 프로세스 위에서 실행됩니다.
    • Java 프로그램 쓰레드는 Java Main 쓰레드부터 실행되며 JVM에 의해 실행됩니다.

Wrapper 객체

 

 

  1. 기본값을 객체화 하는것을 박싱 이라고 하며, 객체를 다시 기본값으로 만드는 것을 언박싱이라고 합니다.
  2. 이러한 것들을 조금 더 문법적으로 자연스럽게 보여주기 위해서 오토박싱, 오토언박싱이라는 것도 존재합니다.
    Integer num = new Integer(17);  // Boxing
    int n = num.intValue(); // UnBoxing

   Character ch = 'X'; // AutoBoxing
    char c = ch; // AutoUnBoxing

박싱해서 객체화된 원시값들은 이제 클래스처럼, 구현되어있는 메소드들을 자유롭게 이용이 가능하고, 객체만 할 수 있는 것들을 할 수 있게 됩니다

 

 

느낀점

-자바공부를 하면서 정리를 열심히 해야겠다.

'TIL' 카테고리의 다른 글

231019_TIL  (0) 2023.10.19
231018_TIL  (0) 2023.10.19
231016_TIL  (0) 2023.10.17
231013_TIL  (0) 2023.10.15
231012_TIL  (1) 2023.10.13