구구구구우
1k
2017-12-26 13:42:59
2
1191

if else 와 && 관련하여 실수


그동안 미친듯이 바빴네요. 그래서 거의 올 생각을 못했습니다.

연말이라 많이 바쁘네요.

원래 사는얘기에 거의 글을 안올리는데 최근에 겪은 아주 사소한 실수에 관련해서 도움이 될까 싶어서 글을 올려봅니다.


아래에 코드가 기존의 코드인데 파일인경우와 폴더인 경우 다르게 처리하는 코드이죠

if(file.isFile) { // File인 경우

  ....

} else {      // Directory 인 경우

  ....

}


그런데 파일의 경우 현재 시간기준으로 3분이내에 수정된 파일은 처리하지 않도록 하는 코드를 추가하라고 요청이 들어왔습니다. 즉 파일의 최근 수정일시가 (현재시간 - 3분) 에서 ~~~~ 현재시간에 속하는 경우 그 파일은 처리하지 않는거죠

사실 지금 글쓰면서 드는 생각은 정말 평소라면 저지르지 않을 실수라고 생각이 드는데 이 작업을 할때는 새벽 1시였습니다.  아래의 코드를 보시죠

if(file.isFile && !isValidateTime(file)) { // File인 경우, isValidateTime - 파일의 최근 수정일시를 검사 

  ....

} else {      // Directory 인 경우

  ....

}


어떤게 문제인지 보이시나요??

이중 if문은 피하려고 썼던 && 연산자가 else문과 만나 어떤 일이 벌어지고 있는지.....

기존 코드에서는 파일이면 파일처리 , 디렉토리이면 디렉토리 처리를 명확하게 하고 있었지만

새로 추가한 코드로 인해 

현재 시간기준으로 3분이내에 수정된 파일은 파일처리를 하지 않게 됩니다. 하지만  file객체 이러한 조건의 충족은 디렉토리 처리를 하라는 조건이 됩니다. 즉 현재 시간기준으로 3분이내에 수정된 파일은 파일 처리하지 않고 디렉토리 처리를 하게 됩니다.

많은 분들이 이러한 실수는 잘 하지 않을거라고 생각하지만, 저처럼 정신이 없으면 어떻게 될지 몰라요.

그러니 if else문장에서 if문에 && 연산자를 추가하는 경우 이러한 문제를 일으킬 여지가 있는지 한번 생각해보시고 추가 하길 바랍니다. 이러한 생각을 공식처럼 가지고 있으면 실수 하지 않을거라 생각이 드네요


 해당 코드를 올바르게 다시 처리하려면 아래와 같아야 됩니다. 

if(file.isFile && !isValidateTime(file)) { // File인 경우, isValidateTime - 파일의 최근 수정일시를 검사 

  ....

} else if(!file.isFile) {      // Directory 인 경우

  ....

}

또는

if(file.isFile ) { // File인 경우, isValidateTime - 파일의 최근 수정일시를 검사 

   if(!isValidateTime(file)) {

        ....

   }

} else {      // Directory 인 경우

  ....

}





0
  • 댓글 2

  • 초코쪼꼬
    6k
    2017-12-26 13:47:24

    적절한 휴식은 꼭 필요한거 같아요.

  • LichKing
    16k
    2017-12-26 16:37:24
    그래서 테스트케이스 작성이 필요한법이죠 ㅎㅎ


  • 로그인을 하시면 댓글을 등록할 수 있습니다.