• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

MyFileWriter 클래스 선언 질문

23.10.20 16:58 작성 조회수 190

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);
            }
        }

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

답변 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 { } 밖에서 변수를 선언하는 것을 권해드립니다.

감사합니다 😊

최재영님의 프로필

최재영

질문자

2023.10.27

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

0

안녕하세요?

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

감사합니다.

최재영님의 프로필

최재영

질문자

2023.10.26

그러면 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 인턴

2023.10.22

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

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

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

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

감사합니다!