-
[매일읽기] 10 things you’re doing wrong in Java개발자 라이프/매일읽기 2020. 7. 29. 10:23반응형
1. 접근 제어자를 잘 모른다
특히 protected 접근 제어자에 대한 이해가 부족
- 동일 패키지에서의 접근 허용
- 하위 클래스에서의 접근 허용
2. equals() 메소드를 사용하지 않는다
- '==' 비교 연산자 대신 equals() 메소드를 사용할 것을 권장
- 특히 참조 변수 비교 시, 더욱 equals() 권장
3. String 추가 조합 연산
- '+' 를 이용해서 String을 재조합할 경우 매우 큰 메모리 누수가 발생 (String은 불변 객체)
- StringBuilder 사용을 권장
- String : StringBuilder = O(n^2) : O(n)
- 간단한 문자열 조합은 '+'을 사용해도 컴파일러 단에서 자동 최적화를 실시하지만, 반복문 내에서의 연속적인 조합은 StringBuilder 사용 권장 (참고)
4. 비밀번호를 String 변수로 처리
- 비밀번호를 단순히 String 객체로 처리하면 메모리 공격에 의해 유출될 수 있음
- JPasswordField, Password4j에서 사용하는 것처럼 char[] 객체로 처리
- 웹 애플리케이션에서 HttpServletRequest 객체를 이용해서 비밀번호를 String으로 받을 경우에는 따로 어쩔 수 없음
- String 객체는 JVM 내부에 캐시되는데, 이 캐시된 것은 GC 이 후에 삭제됨.
- 즉, 캐시 값이 언제 삭제되는지 정확히 확인할 수 없음
5, 6. null 반환 및 null 아규먼트 사용
- null 은 아무런 비지니스 로직을 담지 않음
- NPE 가 발생할 수 있는 환경을 제공하게 됨
- 유지보수 측면에서 어려움
7. 무거운 메소드
- 무거운 메소드를 지속적으로 호출하는 것은 성능적인 면에서 적절하지 못함
- 무거운 메소드의 예 : Pattern.compile()
- 무거운 메소드는 따로 정적 필드로 선언해서 사용하는 것을 권장
8. Exception을 사용하지 않고 별도의 에러 코드를 반환
- 가끔 예외 상황에 Exception 발생이 아닌 -1, "ERROR" 등 임의의 값을 넣는 경우가 있음
- 다양한 관리 포인트 발생
- Exception을 사용하면 코드량과 유지보수 측면에서 깔끔
9. 컬랙션 순환 중 조작
- 컬랙션 순환 중 remove()와 같은 컬랙션 요소를 조작하게 되면 동시성 문제 발생 가능
- 필요하다면 iterator()를 이용하여 안전하게 조작
10. StringBuffer 사용
- StringBuffer는 동기화 속성으로 인해 많은 부하가 발생함
- 딱히 동시성 문제가 아니라면 StringBuilder 사용을 권장
반응형