Top 10 Useful, Yet paranoid Java Programming Techniques
2015. 9. 15. 19:44ㆍJava
번역을 해서 뭐라하면 바로 지울께요... 우헤헷
항상 기본을 잘 해야 하는데... 시간이 지나면 다 맛있게 까먹구... 멍~ ㅎㅎ
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 |