자바 throws에 대한 이해가 부족합니다ㅠㅠ

dlffjddlek00의 이미지

며칠 전에 자바를 공부하기 시작한 자린이입니다. 어제 throw, try-catch, throws 등에 대해 공부했는데,
도저히 이 throws에 대해 이해가 안됩니다. 인터넷에 찾아보면 많은 사람들이 throws가 해당 메소드를 호출하는 메소드에 예외처리를 넘기기 위해 사용한다고들 하는데...
첨부된 사진처럼 throws를 주석 처리해도 결과가 잘 나오거든요? 제가 뭘 잘못 이해하고 있는 것인지 설명 부탁드립니다!

File attachments: 
첨부파일 크기
Image icon 캡처.PNG44.85 KB
swish95의 이미지

exception 이 발생하고 프로그램 중지했는데 어느부분이 이해가 안되시나요?0

------------------------------------------------------------
ProgrammingHolic

dlffjddlek00의 이미지

음.. 그러니까 본문에도 써 놓았 듯 throws의 용도가 이해가 안됩니다.. throws가 없어도 예외처리가 된다면 도대체 왜 필요한 건가요?

익명 사용자의 이미지

문법적으로 우아하게 지원하는거죠.
c 도 예외처리가 가능하지만, try...catch, throw...catch 문이 없어서 우아하지 않은 방법으로 예외처리합니다.
자바 언어의 용도가 이해가 안 됩니다. 자바 없어도 c 의 errno 로 예외처리가 된다면 도대체 자바는 왜 필요한 건가요?
더하기를 곱하기 용도로 쓸 수 있는데 곱하기 연산자는 도대체 왜 필요한 건가요?
이런 질문이랑 똑같은 질문을 하셨습니다.

dlffjddlek00의 이미지

무슨 소리신지.. 제 질문의 의도를 이해 못하신 거 같은데.. 날서게 답하실 거면 질문 좀 제대로 읽고 답해주세요..
제 말은 throws가 caller로 부터 예외를 처리하도록 하기 위한 것으로 알고있는데, 첨부파일 보면 throws를 주석처리해도 caller인 main에서 예외처리가 잘 됩니다. 그렇다면 throws는 왜 필요한건지 묻고있는겁니다.

reistrem의 이미지

.

익명 사용자의 이미지

제가 질문을 잘못 이해해서 죄송합니다. 동문서답을 했네요.

reistrem의 이미지

구글에서
java throws throw 로 검색 해보시면 차이를 간단히 설명한 내용이 많이 나옵니다.
좀 찬찬히 읽어보시면 충분히 이해 가능합니다.

dlffjddlek00의 이미지

흐.. 질문 삭제 어케 하나요?? 답변해주시는 분들이 다들 질문을 오해하시는 거 같아서요ㅠㅠ 저는 throw와 throws의 차이를 묻는 게 아니라, throws가 caller로 예외처리를 넘기는 기능을 하는 걸로 알고있는데 throws를 쓰지 않아도 자동으로 예외가 caller로 넘어가는 예시(제가 첨부했습니다.)로 인해 혼동이 왔고 그래서 throws는 왜 필요한 건지 묻고있는겁니다.
거기에 대한 답은 이미 찾았습니다. checked exception과 uncheked exception의 차이더군요..

reistrem의 이미지

굳이 삭제 할 필요가 있을까요?

dlffjddlek00의 이미지

질문에 대한 답변은 커녕 질문을 제대로 이해도 못하신 분들이 답변하시는 걸 계속 겪으니 걍 질문 삭제하고 싶어져서 그랬습니다..

익명 사용자의 이미지

일단 질문에 대한 답은 https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.4.6

Quote:
A throws clause is used to denote any checked exception classes (§11.1.1) that the statements in a method or constructor body can throw (§11.2.2).

(중략)

It is permitted but not required to mention unchecked exception classes (§11.1.1) in a throws clause.

The relationship between a throws clause and the exception checking for a method or constructor body is specified in §11.2.3.

Essentially, for each checked exception that can result from execution of the body of a method or constructor, a compile-time error occurs unless its exception type or a supertype of its exception type is mentioned in a throws clause in the declaration of the method or constructor.

checked exception과 unchecked exception에 대해서는 뭐 위에서도 가리키고 있듯 §11.1.1: The Kinds of Exceptions를 보시면 되겠고요. (https://docs.oracle.com/javase/specs/jls/se13/html/jls-11.html#jls-11.1.1 )

질문자는 이미 다 이해한 듯한데 나중에 누가 보러 올 수도 있으니 답변 남겨둡니다.

뭐, 목마른 사람이 우물을 파는 법이라고 하던가요. 아쉬울 거 하나 없는 답변자들한테 왜 내 질문 똑바로 이해하고 답변하지 않느냐고 따져 물어봤자 별 소용 없습니다.

dlffjddlek00의 이미지

님 제외한 답변자 세 명중 왜 질문 이해 못하냐고 따져 물어본 사람은 한명 뿐입니다. 제가 느끼기에 답변이 날서있었기 때문이죠. 당연히 질문 잘못 이해할 수 있죠. 그럼 질문자는 당연히 거기에 대해 "제 질문은 ~가 아니라 ~입니다"라고 말할 수 있는 거 아닌가요?
마지막은 하도 답답해서 걍 질문 삭제할 수 있냐고 물어본 거고요..

익명 사용자의 이미지

그야 무슨 말이든 말할 수는 있죠. 그게 무슨 의미가 있을지는 또 다른 문제이고요.

저는 개인적으로 이 질문이 꽤 명확하게 쓰였다고 생각합니다만, 사실 답변자들은 질문이 어떤 의미인지 정확히 이해하려고 애쓸 유인이 별로 없답니다.

물론 이왕 답변 쓰는 김에 질문자에게 실제로 도움이 될 수 있다면 기분이 약간 더 좋을 수도 있겠죠. 근데 뭐, 그게 큰 대수겠습니까? 어차피 여가 시간에 취미삼아 하는 일이랍니다.

dlffjddlek00의 이미지

제가 답글 단 부분은 님이 '왜 이해 못하냐고 따져 물어봤자 소용없다'길래.. 따져 물은 적이 없다는 것을 말하고 싶었던 겁니다.. 제가 따져 물었던 건 제가 느끼기에 날서 있었다고 느낀 한 분 뿐이고 나머지 분들은 이해를 못하신 거 같아서 다시 말씀드렸을 뿐이에요.. 제 질문 이해하라고 애쓰라고 하는 말이 아닙니다! 다만 좀 답변을 할 때 부드럽게 했으면 해서 그분께 저도 답변을 세게 단 거 뿐입니다. 그리고 마지막에 한탄은 그저 계속 의미없는 답변이 돌아오니 지쳐서 삭제할 수 있는 방법 없냐고 물은 거고요.
어쨌든 질문에 맞는 좋은 답변 해주신 거 감사합니다!

익명 사용자의 이미지

질문을 잘못 이해하고 동문서답을 달아서 죄송합니다.
질문하신 분의 감정을 상하게 했네요.
죄송하게 되었습니다.

익명 사용자의 이미지

그리고, 많은 언어들이 있어도 되고, 없어도 되는 구문, 문법들이 있습니다.
어떤 구문, 어떤 문법은 없어도 잘 작동하는데, 도대체 그게 왜 필요하냐..
이런 의문들이 다른 언어들을 공부하면서도 생기게될텐데...
없어도 되지만 "문법적으로 우아하게 지원하는 것입니다" 이렇게 이해하시면 되겠습니다.
기분을 상하게 하여 죄송합니다.

dlffjddlek00의 이미지

저도 죄송합니다..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.