inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

퀴즈 #12

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

313

김병곤

작성한 질문수 34

0

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

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

 

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

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

 

 

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

java 객체지향 trycatch therad

답변 1

0

Kim DongKyun

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

 

  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 타입을 가지는(혹은 상속, 구현하는) 어떠한 객체가 필요하다는 의미로 해석 해 주시면 좋을 것 같습니다!

 

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

0

나도코딩

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

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

145

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

117

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

70

1

사고력 키우는 법이 어떤게 있나요?

0

93

2

getter setter

0

101

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

78

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

75

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

114

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

116

2

응용이 어렵습니다.

0

205

2

IntelliJ가 보이지 않습니다.

0

184

3

JDK 버전 문의

0

128

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

120

2

Iterator 문의

0

104

1

코드 순서 문의

0

141

1

클래스 메소드

0

149

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

119

2

HashMap

0

80

2