인프런 커뮤니티 질문&답변

김병곤님의 프로필 이미지
김병곤

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 #12

개념이 잘 이해가 안가요 ㅠ 도와주세요

작성

·

227

0

 고민.1 chap 12 부터 이해가 안갔는데 threadA.start(),

threadB.start(); 이부분에서 그냥 출력하면 되지 굳이 왜 try catch를 써서 해주는지 궁금합니다. try catch는 예외 처리를 할떄 쓰는 것인데 예외 처리 할게 있는게 아닌데 왜쓰는건가요?고민 2.Runnable 인터페이스를 가져오려면 무조건 추상메소드 run을 정의해줘야하는게 아닌가요? ㅠㅠ

 

고민 3. Thread는 클래스고 Runnable은 인터페이스인데

이런식으로 쓰레드 객체를(?) 만들 떄 runnableA를 괄호안에 넣는 이유가 runnableA를 쓰레드화를 할려고 그런건 가요?

 

 

질문을 조금 두서 없이했지만 도와주시면 감사하겠습니다.

답변 1

0

안녕하세요! 질문해 주신 내용들을 하나씩 설명드려볼게요.

 

  1. Runnable

Runnable 는 클래스가 아닌 인터페이스 입니다.

image

그리고 위 그림처럼 추상 매서드를 하나 가지고 있어요. (추상 매서드는 실제 매서드처럼 작동하기 위해서 반드시 재정의 되어야 하는, 실제 건물이 아닌 설계도 정도라고 생각하시면 좋을 것 같아요! 클래스가 객체의 설계도인것처럼요)

 

이 Runnable 인터페이스는 구상 매서드가 아닌 추상 실제 객체(인스턴스) 처럼 사용되기 위해서는 반드시 이 추상 매서드를 재정의 해야 합니다. 이 추상 매서드 그 자체로는 아무 역할도 할 수 없기 때문이에요!

 

그렇다면 제공해주신 사진을 한 번 볼게요

 

image

해당 사진에서 runnableA = () -> {} 형식으로 러너블 객체를 선언했어요. 이 형태를 람다라고 부릅니다.

 

[람다식 설명 블로그(더 찾아보시면 더 좋아요!)]

 

이 람다식을 통해서 Runnable 인터페이스 run() 을

 

image

이렇게 재정의 하는 순간, 이 인터페이스를 객체처럼 사용 할 수 있게 된답니다. 아래 링크도 한번 보시면 좋을 것 같아요!

 

[익명 클래스에 대한 설명 블로그]

 

2.try-catch

image

이 부분을 말씀 해 주신 것 같아요! 이 부분에서 우리가 트라이-캐치 로 감싸고자 하는 매서드는 Thread 객체의 join() 매서드인데요, 이 매서드를 살펴보겠습니다.

 

image

이 부분인데요! 매서드의 선언부분에 throws InterruptedException { ... 이라고 되어 있는 부분을 봐주세요!

 

자바에서는 Exception 을 상속하는 예외를 체크드 익셉션, RuntimeException 을 상속하는 예외를 언체크드 익셉션이라고 부릅니다.

 

이 둘의 가장 큰 차이는 어느 시점에 발생하는가 에 있습니다. (체크드는 컴파일 타임, 언체크드는 런타임)

 

이 InterruptedException 은 Exception 을 상속하는 체크드 익셉션이기 때문에 우리가 컴파일 시점, 즉 코드를 작성하는 시점에 반드시 예외 처리를 해야하고, 하지 않으면 컴파일 에러가 발생하는 에러입니다!

 

이 에러를 핸들하기 위해서 try-catch 문을 사용한 것입니다.

 

[체크드 익셉션, 언체크드 익셉션 설명]

 

  1. Thread 를 선언하기 위해서 사용된 Runnable 인터페이스

Thread 의 생성자는 아래와 같이 되어있습니다.

 

image

이 생성자에서는 Runnable 타입의 객체를 필요로 하는데요, 이 Thread 객체가 생성되기 위해서 Runnable 타입을 가지는(혹은 상속, 구현하는) 어떠한 객체가 필요하다는 의미로 해석 해 주시면 좋을 것 같습니다!

 

도움이 되었으면 좋겠습니다. 감사합니다!

나도코딩님의 프로필 이미지
나도코딩
지식공유자

와... 친절하고 자세하고 꼼꼼한 답변 너무나 감사드립니다 😊

김병곤님의 프로필 이미지
김병곤

작성한 질문수

질문하기