Top 10 Useful, Yet paranoid Java Programming Techniques

2015. 9. 15. 19:44Java

번역을 해서 뭐라하면 바로 지울께요... 우헤헷
항상 기본을 잘 해야 하는데... 시간이 지나면 다 맛있게 까먹구... 멍~ ㅎㅎ


1. 문자열을 앞에 둬라
     if(“literal”.equals(variable)){…}

2. 예전 JDK API 신뢰하지 마라
     “If this abstract pathname does not denote a directory, then this method returns null. Otherwise an array of strings is returned, one for each file or directory in the directory."

     String [] flies = file.list();     
     //watch out
     if(files != null){
          for(int i = 0 ; i < files.lenth ; i++){…}
     }
     
     if(file.isDirectory()){
String [] flies = file.list();     
     //watch out
     if(files != null){
          for(int i = 0 ; i < files.lenth ; i++){…}
  }
     }

3. “-1”을 신뢰하지 마라

    String.indexof() 에서 Javadoc 는 아래와 같이 진술 한다.
     “ the index of the first occurrence of the character in the character sequence represented by this object [is returned] , or -1 if the character does not occur.” 
     
     //Bad
     if(string.indexOf(character != -1 ) {…}
     //Good
     if(string.indexOf(character > 0 ){…}
     
4. 임시 할당을 피해요
     
     //Oops
     if (variable = 5){…}
     //Better (because causes an error}
     if( 5 = variable){ ..}
     //Intent (remember. Paranoid Javascript : === )
     if( 5 === variable){…}

5. null 과 길이를 체크해요 

     //bad
     if(array.length > 0 ) {…}
     //good
     if(array != null && array.length > 0){…}

6. 모든 메소드는 final 이다.

     // Bad
     public void boom(){…}
     //Good Don’t touch.
     public final void boom(){…}

7. 모든 변수들과 파라미터는 final  이다.
     
     //Bad
     void input(String importantMessage){
          String answer = “…”;
          answer = importantMessage = “LOL accident”;
     }
     //Good
     final void input (final String importantMessage){
          final String answer =“…”;
     }

8. 오버로딩 시에 generics을  신뢰하지 마라

     //Bad
     <T> void bad(T value){
          bad(Collections.singletonList(value));
     }
     <T> void bad(List<T> values){
          ...
     }

     //Good
     final <T> void good(final T value){
          if(value instanceof List)
               good((List<?>) value);
          else
               good(Collections.singletonList(value));
     }
     final <T> void goo(final List<T> values){
          ...
     }

     여러분이 알다시피, 여러분의 사용자는 아래와 같이 한다.
     //This library sucks
     @SuppressWarnings(“all”)
     Object t = (Object) (List) Array.asList(“abc”);
     bad(t);

     날 믿어라, 난 모든걸 봐왔다. 아래와 같이 포함된 걸
     String unformattedDepotNo = depotNo;
     String query1 = “select replace(‘“ + depotNo + “%’, ‘- ‘ , ‘-‘) from dual”;
     rs1 = stmt.executeQuery(query1);
     if(s1.next(){
          depotNoFormatted = rs1.getString(1);
     }

9. 항상 switch default를 던져라
     //Bad
     Switch(value){
          case 1: foo(); break;
          case 2: bar(); break;
     }
     //Good
     switch(value){
          case 1:foo(); break;
          case 2:bar(); break;
          default:
               throw new ThreadDeath(“That’ll teach them”);
     }

10. {} 괄호와 함께 Swich 해라

     //Bad
     Switch(value){
          case 1: int j = 1; break;
          case 2: int j = 2; break;
     }
     //Good
     switch(value){
          case 1: {
                final int j = 1;
                break;
          }     
          case 2: {
                final int j = 2;
                break;
          }
          default:
               throw new ThreadDeath(“That’ll teach them”);
     }




'Java' 카테고리의 다른 글

JUnit5 개념 잡기  (0) 2017.06.02
java8 StringJoiner 과 String.join 활용  (0) 2016.01.05
ThreadLocal 이 뭘까요?  (0) 2016.01.05
Apache Daemon 에 대해서  (3) 2015.12.08
Runtime.addShutdownHook()  (0) 2015.09.30
Exception  (0) 2013.08.04
Regular Expressions in Java  (0) 2013.07.30
Delegate, Event , Ramda  (0) 2013.07.04
Struts2 도 해보자 시작1  (0) 2013.06.30
JDBC에 대해서 다시한번 보라구..  (0) 2011.05.11