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

조회수 137회
 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 답변

  • 좋아요

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

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.