ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [매일읽기] 10 things you’re doing wrong in Java
    개발자 라이프/매일읽기 2020. 7. 29. 10:23
    반응형
     

    10 things you’re doing wrong in Java

    The most common mistakes Java developers make

    towardsdatascience.com

    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 사용을 권장

     

    반응형

    댓글

Designed by Tistory.