inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Try With Resources

MyFileWriter 클래스 선언 질문

해결된 질문

309

최재영

작성한 질문수 24

0

 처음에 MyFileWriter 클래스를 null 로 선언하고 Try 문안에서 new 키워드를 사용한 이유는 무엇인지 궁금합니다 !!

public static void main(String[] args){
        MyFileWriter writer = new MyFileWriter();
        try{
            writer.write("아이스크림이 먹고 싶어요");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                writer.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

이런식으로 사용하는 것과 무슨 차이가 있는지 궁금합니다 !

java 객체지향

답변 3

0

나도코딩

안녕하세요?

네, 맞습니다. try 문 밖에서 null 로 선언해두고 try 문 안에서 초기화하는 것과 try 문 안에서 초기화하는 것은 동작 및 예외 처리에 있어서는 동일합니다. 다만 writer 객체를 try 문 안에서 선언하게 되면 finally 에서 writer 를 사용할 수가 없어요. 모든 변수는 변수가 선언된 곳 내에서만 사용될 수 있는데 try { ... } 영역과 finally { ... } 영역은 서로 다르기 때문에 try { 내부 } 에서 선언된 변수는 finally { 내부 } 에서는 사용될 수가 없습니다.

try {
	MyFileWriter writer = new MyFileWriter();
	writer.write("아이스크림이 먹고 싶어요");
} catch (Exception e) {
	e.printStackTrace();
} finally {
	try {
		writer.close(); // 에러 발생
	} catch (Exception e) {
		throw new RuntimeException(e);
	}
}

그래서 이러한 예제와 비슷한 경우에는 try { } 와 finally { } 모든 곳에서 사용할 수 있도록 try { } 밖에서 변수를 선언하는 것을 권해드립니다.

감사합니다 😊

0

최재영

이해했습니다 ! 답변 감사합니다

0

나도코딩

안녕하세요?

객체를 try 블럭 내에서 초기화하는 것은 경우에 따라 유용할 수 있습니다. 특히 객체를 초기화하는 과정에서 발생할 수 있는 예외를 처리할 수 있게 해주는데요. 예를 들어 어떤 객체를 초기화할 때 파일을 열어야 하는데 지정된 경로에 파일이 없다면 예외가 발생할 수 있겠지요. 또는 어떤 내용을 쓰기 위해 파일을 여는데 그 파일이 읽기 전용인 경우에도 문제가 될 수 있습니다. 이때 초기화하는 과정을 try 블럭 내에 넣는다면, 프로그램이 비정상 종료되는 대신 catch 블럭에서 적절한 예외 처리를 할 수 있을 거에요 😊

감사합니다.

0

최재영

그러면 try 문 밖에서 null 로 선언하고 try 문 안에서 초기화해주는것과

try 문안에서 바로 객체를 초기화해주는것은 똑같은거네요 ?

public static void main(String[] args){
      try{
          MyFileWriter writer = new MyFileWriter();
          writer.write("아이스크림이 먹고 싶어요");
      }catch (Exception e){
          e.printStackTrace();
      }finally {
          try {
              writer.close();
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
}

0

인프런 AI 인턴

안녕하세요 최재영님, 인프런 AI 인턴이에요.

MyFileWriter 클래스를 null로 선언하고 Try 문 안에서 new 키워드를 사용한 이유는, 예외 발생 시에는 try-catch 블록에서 예외를 처리하고 finally 블록에서 객체를 닫기 위해서입니다.

만약 처음에 MyFileWriter writer = new MyFileWriter()로 객체를 생성하면, 객체 생성 이전에 예외가 발생할 경우에는 writer 변수가 null인 상태로 finally 블록으로 접근하게 되며, null 상태로 close() 메서드를 호출하면 NullPointerException이 발생할 수 있습니다.

따라서, 예외가 발생할 수 있는 코드에서는 객체를 null로 미리 선언하고 try 블록에서 new 키워드를 사용하여 객체를 생성하는 것이 안전한 방법입니다. 이렇게 하면 언제나 finally 블록에서 객체를 닫을 수 있습니다.

감사합니다!

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

1

145

2

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

0

118

2

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

0

70

1

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

0

93

2

getter setter

0

101

2

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

0

79

1

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

0

75

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

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

0

152

2

영상이 재생이 안됩니다.

0

167

3

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

0

116

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

185

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

120

2

HashMap

0

80

2