이 코드 좀 더 간결하게 바꿀 수 있을까요?
조회수 542회
try {
if (!videoFile.exists()) {
videoFile.createNewFile();
} else {
videoFile.delete();
videoFile.createNewFile();
}
if (!cnFile.exists()) {
cnFile.createNewFile();
} else {
cnFile.delete();
cnFile.createNewFile();
}
if (!enFile.exists()) {
enFile.createNewFile();
} else {
enFile.delete();
enFile.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
}
이 코드를 좀 더 간결하고 클린하게 바꾸고 싶은데 딱히 클린한 코드가 생각이 나질 않네요! 혹시 고견있으신 분은 부탁드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
설계를 다시해야 합니다.
구체적으로 행위를 추상화 해야 합니다.
주어진 코드에서 보면 "어떤 파일을 존재하면 삭제" 하는 코드입니다.
여기서 추상화가 가능한 부분은 "존재하면 삭제" 부분입니다.
public void execute(AbstractFile file) { if (!file.exists()) { file.createNewFile(); } else { file.delete(); file.createNewFile(); } }
위와 같이 행위를 추상화 할 수 있습니다.
이렇게 하려면 file 의 인터페이스는 아래와 같이 선언되어 있어야 하며 각각의 처리하려는 파일은 아래의 AbstractFile 구현하고 있어야 합니다.
interface AbstractFile { boolean exists(); void delete() void createNewFile(); }
-
간단하게 대체 클래스를 만들어서 사용하는 방법이 있습니다.
File class를 extends 하여 기존 instance 타입을 대체합니다.
public class MyFile extends File { MyFile(String fname) { super(fname); } public boolean createFile() throws IOException { if(this.exists()) this.delete(); return this.createNewFile(); } } // createNewFile 대신에 createFile로 변경합니다. try { videoFile.createFile(); } catch(Exception e) { }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력