MyFileWriter 클래스 선언 질문
처음에 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 { } 밖에서 변수를 선언하는 것을 권해드립니다.
감사합니다 😊
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 인턴이에요.
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





