이 코드 좀 더 간결하게 바꿀 수 있을까요?

조회수 544회
 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)
    {
    
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)