안녕하세요. 강의 잘 듣고 있습니다. 코드 작성하다가 예외처리에 대한 궁금증이 있어 질문드립니다. 제가 알고있는 스프링 예외처리 정책은 Unchecked Exception은 같은 트랜잭션 내에서 Rollback 되고 Checked Exception은 필수로 try catch로 예외처리를 해서 Rollback이 안되는 것으로 알고 있습니다. Unchecked Exception도 try-catch로 잡아서 예외를 처리하려고 하는데 Unchecked Exception은 Checked Exception과는 다르게 중간에서 예외를 잡아도 가장 상위 메소드로 올라가서 예외가 발생되더라구요. 때문에 최상위 메소드에서 try-catch로 잡아줘야지만 예외가 잡히고 다음 스텝으로 넘어가던데 왜 중간에서 try - catch로 잡히지 않는 것인지 궁금합니다. 간단한 코드 첨부하겠습니다. class A { @Autowired private B b; @Transactional void aMethod(){ for(int i=0; i<10; i++){ b.bMethod(i); } } } class B { @Autowired private C c; @Transactional void bMethod(int i){ try{ c.cMethod(i); }catch(RuntimeException e){ //예외처리로직 } } } class C { @Autowired private CRepository cRepository; @Transactional void cMethod(int i){ if(i==5){ throw new RuntimeException(); }else{ cRepository.save(i); } } } 위의 코드를 실행하면 B class의 try catch가 C에서 발생한 RuntimeException을 잡아서 계속 직행하지 못하고 A까지 예외가 올라가서 예외가 발생됩니다. try catch 블록을 A class로 옮기면 예외를 잡아서 console에 예외가 터지지 않고 정상 작동됩니다. Checked Exception은 저렇게 중간에 예외를 잡아도 예외가 상위 메소드로 올라가지 않고 처리되던데 Unchecked Exception은 왜 최상위 메소드까지 올라가서 처리를 해줘야하는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 해당 강의에서 김영한님이 스프링 부트 버전 2.3.3 버전을 클릭하셨는데 현재 시점에서 Spring Initializr에 접속하면 선택 가능한 스프링 부트 버전 3.1.3, 3.0.10, 2.7.15입니다. 이 중에서 2.7.15로 선택해서 강의 들으면 될까요??
자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
value의 변수가 boolean이라서 value의 출력이 참,거짓으로 나오는건 알겠는데 System. out .println(myAge <= 25); 를 출력해보니 왜 true라고 나올까요?? System. out .println(myAge == teacherAge);가 false로 출력되는 것도 마찬가지입니다. 여기서 myAge의 변수가 처음에 int 였는데 왜 참,거짓으로 출력이 되나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 테스트 시에 선생님 화면처럼 관련 로그가 나오지 않는데, 어떻게 설정해야 하는지 궁금합니다! [제 화면] [선생님 화면]
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. xml 부분을 듣고 있는데, 테스트는 통과하지만 logback 파일과 관련해서 에러 메시지가 뜹니다. 로그 출력 문제로 logback.xml 파일을 추가했는데 혹시 원인을 알 수 있을까요? 한 번 에러가 나니까 테스트를 실행할 때마다 계속 뜹니다. 해당 에러 메시지입니다. Failed to auto configure default logger context Reported exception: ch.qos.logback.core.joran.spi.JoranException: Problem parsing XML document. See previously reported errors. at ch.qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:65) at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:151) at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110) at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53) at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:64) at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:134) at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84) at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55) at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130) at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59) at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:178) at org.springframework.context.support.GenericApplicationContext.<init>(GenericApplicationContext.java:114) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:67) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:91) at hello.core.beanDefinition.BeanDefinitionTest.<init>(BeanDefinitionTest.java:11) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at org.junit.platform.commons.util.ReflectionUtils.newInstance(ReflectionUtils.java:550) at org.junit.jupiter.engine.execution.ConstructorInvocation.proceed(ConstructorInvocation.java:56) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.api.extension.InvocationInterceptor.interceptTestClassConstructor(InvocationInterceptor.java:73) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:77) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:355) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateTestClass(ClassBasedTestDescriptor.java:302) at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:79) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:280) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272) at java.base/java.util.Optional.orElseGet(Optional.java:369) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) Caused by: org.xml.sax.SAXParseException; systemId: file:/C:/Users/Name/Desktop/%ec%8a%a4%ed%94%84%eb%a7%81%20%ea%b3%b5%eb%b6%80/core/core/out/production/resources/logback.xml; lineNumber: 1; columnNumber: 6; The processing instruction target matching "[xX][mM][lL]" is not allowed. at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243) at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635) at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:324) at ch.qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:59) ... 89 more 18:12:13,063 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 18:12:13,063 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/C:/Users/Name/Desktop/%ec%8a%a4%ed%94%84%eb%a7%81%20%ea%b3%b5%eb%b6%80/core/core/out/production/resources/logback.xml] 18:12:13,205 |-ERROR in ch.qos.logback.core.joran.event.SaxEventRecorder@2ddc9a9f - XML_PARSING - Parsing fatal error on line 1 and column 6 18:12:13,205 |-ERROR in ch.qos.logback.core.joran.event.SaxEventRecorder@2ddc9a9f - org.xml.sax.SAXParseException; systemId: file:/C:/Users/Name/Desktop/%ec%8a%a4%ed%94%84%eb%a7%81%20%ea%b3%b5%eb%b6%80/core/core/out/production/resources/logback.xml; lineNumber: 1; columnNumber: 6; The processing instruction target matching "[xX][mM][lL]" is not allowed. 아래는 logback.xml 파일입니다. <?XML version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration> 테스트가 패스는 되지만 혹시 추후 문제가 발생할까봐 질문 드립니다.
안녕하세요. Getter와 Setter 강의를 보면서 궁금한 점이 생겨서 질문드려요. System.out.println("가격 " + b2.price + "원"); System.out.println("가격 " + b2.getPrice() + "원"); System.out.println("해상도 " + b2.getResolution()); System.out.println("해상도 " + b2.resolution);ㅊ결과) 출력) 가격 100000원 가격 100000원 해상도 판매자에게 문의하세요. 해상도 null 질문) 위의 코드를 출력하면 b2.price와 b2.getPrice()는 같은 값이 출력 되는데, b2.getResolution()와 b2.resolution은 왜 출력 값이 다른가요?
bean 조회 기본 방법이 빈이름, 빈타입 빈타입 이렇게 두가지 알려주셨는데요 beanDefinitionName으로 조회하는 Test 코드 예제가 있었는데 이것은 빈 이름만으로 조회하는 케이스가 아닌가요? beanDefinitionName을 통한 조회와 그냥 빈의 이름으로 조회하는 것과 차이가 있는것인지 궁금합니다. 만약 차이가 없다면 조회 기본 방법에 빈이름만으로 조회도 포함되어야 하는 것이 아닌지 궁금합니다.
안녕하십니까 백엔드 스프링 공부를 막 시작한 학생입니다. 이번 학기 강의에서 프론트와 백엔드 팀원들과 웹 애플리케이션을 만들려고 합니다. 이에 도움을 받고자 무료강의를 수강하였습니다. 또한 제공해주시는 여러가지 로드맵과 게시판을 활용하여 방향을 잡고 문제를 해결하기도 했습니다. 모든 강의를 수강하고 이해하는데 시간을 투자하는 것이 당연하지만 당연한 부분을 수행하기 위한 동기부여또는 다른 의견을 듣고자 함에 질문글을 남깁니다. 저는 준비된 것은 없지만 이번 프로젝트에 큰 기여를 하고 싶습니다. 한 학기 동안 어떤 강의를 집중적으로 들어야 할지, 어떤 강의 순서를 따라야 할지 궁금합니다. 자바만 어느정도 알고 있으며 프론트와 백엔드가 연결되는 모습을 알지 못하며 데이터베이스에 대한 지식이 전무하기 때문에 생긴 막연한 질문이라고 생각합니다. 하지만 학생의 한 고민을 너그러이 이해해주시고 조언 남겨주시면 감사드리겠습니다.
안녕하세요 주니어 개발자 길라잡이가 되주셔서 감사합니다. fulltext index에 대해서 질문이 있습니다. 임계점이 올경우 튜닝으로도 해결할 수 없는 문제라고 말씀해주셨는데요 경험담이라고 해주셨는데 그 경험담을 듣고 싶어서 질문을 남겨봅니다. 공식 문서에서 찾아보니까 https://dev.mysql.com/doc/refman/8.0/en/innodb-fulltext-index.html#innodb-fulltext-index-deletion 동시 경합이 발생할 수 있다고 작성이 되어있는데 이 문제로 발생한건가요 ? 아니면 다른 인덱스와 다르게 인덱스 용량 때문에 발생한 문제이신건가요 ? FULLTEXT INDEX의 한계 검색을 해도 다 좋은점만 나오더라구요..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 자바8에 대한 기초를 다 배우고 현재 다른 강의인 자료구조영상과 함께 스프링 핵심원리 기본편 강의를 다 들었습니다. 기초적인 지식은 쌓였다고 생각하는데 야생형 로드맵의 순서로는http 부터 mvc 강의를 듣고 db로 넘어가서 다듣고 그뒤 바로 활용1편을 들으라고 하는데 저같은 경우 핵심원리 기본편에 나온 개념들이 "그래서 코드를 작성하거나 설계를 할때 어떤식으로 적용되고 활용되는데?" 라는 궁금증이 계속있습니다. 빨리 보고싶기도 하고 그래서 그러는데 야생형의 로드맵을 순서대로 따라가면 기초편에서 배운 핵심원리를 손에 익지도 않은 채로 까먹을거같아서 바로 활용1편인 스프링 부트와 jpa활용을 듣고 http부터 다시 순차적으로 들을까 생각중인데, 강의에서 김영한 선생님이 하신 말을 들어보면 활용1편을 듣기전에 웹 MVC가 기본이고 거기서 데이터처리 방식을 강의를 듣고 나서 활용1편으로 넘어가라고 하시더라구요. 야생형 로드맵을 순차적으로 듣고 활용1편을 들어도 핵심원리 기본편에서 들은 기초 개념들을 안까먹을까요? 아니면 웹 MVC로 넘어가도 핵심원리 기본편에서 하신 내용 그대로 이어지나요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기서 말하는 클라이언트가 서버단의 컨트롤러인지 프론트엔드를 의미하는지 궁금합니다. 추가로 만약 컨트롤러단에서 api 요청이 왔을때 멤버와 할인의 혼합정보 api 를 만들게 되면 별도의 서비스를 만들어야하는 건가요?(기존 있는 서비스를 활용하는 비지니스 로직 개발?)
try(MyFileWriter writer2 = new MyFileWriter()){ writer2.write("빵이 먹고 싶어요."); } catch (Exception e){ e.printStackTrace(); } 이런 경우에 close()함수가 실행된다고 하셨는데요. AutoCloseable이 아닌 인터페이스를 구현한 class인 경우에도, try구문에 소괄호로 객체를 생성했을때 해당 인터페이스에 있는 메소드를 호출하나요?