프로그래밍

  • 소프트웨어의 품질을 향상시키는 가장 중요한 항목 중 하나는 예외 처리다. 적절한 예외 처리란 발생 가능한 예외를 최대한 줄이고 문제점을 외부로 노출시키지 않는 것이 아니라 정확한 예외의 유형과 정보를 전달하는 것이다. 사용자 입장에서 어떤 문제점이 발생했을 때 시스템이 이 문제점을 숨기는 […]
  • 배열에서 ArrayList와 같은 List 컬렉션으로 변경하거나 복사할 때 빈번히 예제 11.2.1과 같은 원시적인 방식을 통해 변환하곤 하는데, 이는 매우 비효율적인 방법이다. 리스트는 데이터의 길이가 가변적이라서 메모리 자원이 허용하는 한도 내에서 지속적으로 데이터의 길이를 늘일 수 있다. 하지만 리스트 또한 내부적으로 […]
  • 간혹 자바의 컬렉션을 사용할 때 List, Set, Map과 같은 인터페이스가 아닌 ArrayList, Vector, HashMap, HashTable과 같은 구현체로 선언할 때가 있는데 이는 객체의 결합도 측면에서 매우 비효율적인 방식이다. 예를 들어, Vector와 ArrayList는 List라는 인터페이스를 바탕으로 같은 기능을 구현하지만 Vector는 자바 1.0부터 […]
  • 어떤 문자열이 특정 문자열로 시작하는지 검사할 때는 startsWith가 매우 유용하다. 특히 메시지 코드나 이벤트 코드 등과 같이 의미가 함축된 문자열을 분류하는 데 매우 유용하게 사용된다. 예를 들어, UPD00001, DEL00001, CRT00001처럼 명령어[UPD/DEL/CRT]와 일련번호로 구성되어 접두사에 특별한 의미가 부여된 문자열을 검사할 때는 […]
  • Double 객체를 이용해 연산할 때 예외값인 NaN(Not A Number)를 진단하기 위해 Double 객체의 Double.NaN으로 비교하는 경우가 있는데, 안타깝게도 이 경우 개발자의 예측과는 다르게 동작하는 문제가 있다. 예제 1.21.1에서 볼 수 있듯이 errorValue가 Double.NaN 값으로 설정돼 있어도 Doubel.NaN과 같다고 인지하지 못하는 […]
  • Boolean 객체를 사용할 때 Boolean 객체를 인스턴스화하는 것은 불필요한 작업이다. 이 객체는 Integer나 Float 등과는 달리 실제로 가질 수 있는 값이 true 또는 false밖에 없으며, 이미 이 값이 Boolean 객체 내에 정의돼 있으므로 예제 1.9.1과 같이 new Boolean을 통해 객체를 […]
  • 일부 자바 개발자는 float과 double을 이용한 부동소수점 연산이 언제나 정확한 값을 도출한다고 믿는다. 하지만 그런 예상과 달리 float과 double은 정확한 값이 아닌 근사치를 계산하며, 그로 인해 개발자를 혼란에 빠트린다. 예제 1.7.1과 같이 4.7 + 0.4의 결과는 5.1이어야 정확하지만, 실제 결과는 […]