본문 바로가기

dev/자바

(27)
네이버 메일 SMTP 자바로 네이버 email 보내는 방법은 간단합니다. 먼저 네이버 메일 SMTP 설정을 수정해야 합니다. SMTP 설정을 하는 계정은 송신하는 이메일입니다. 수신 이메일이 아닙니다. 추가로 현재 서버에서 네이버 SMTP 서버에 접속이 가능한지 확인합니다. 이메일을 보내는 라이브러리는 여러 가지가 있지만 javax.mail을 사용하겠습니다. 예제 코드를 설명하자면 49~54라인은 자바에서 네이버 SMTP에 접속 정보(Properties)를 설정하고 있습니다. 53~54라인에 ssl 설정 빠지면 MessagingException 예외가 발생합니다. 56~61라인은 SMTP 세션을 얻고 있는데 이 세션은 송신하는 이메일의 세션이라서 송신 이메일 계정의 아이디와 비밀번호를 통해 인증 정보를 얻고 있습니다.(59라..
Array List min max 자바에서 배열이나 리스트 최소값과 최대값을 루프를 통해 구하는 방법보다 더 쉬운 방법이 있습니다. 위의 예제 코드는 정수 타입의 배열과 리스트의 최소값과 최대값을 구하는 코드로 배열인 경우 Arrays, 리스트인 경우 Collections를 사용하여 각각 최소값과 최대값을 구하고 있습니다. 루프를 사용해서 구하는 코드보다 훨씬 간결하기 때문에 이 방법을 사용하는 것이 좋을 것 같습니다.
Java 파일 경로 조회 자바에서 파일을 읽을 때 일반적으로 파일경로에 현재 디렉토리(./)나 상위 디렉토리(../)를 포함하지 않습니다. 그래도 혹시나 포함하는 경우 파일 위치를 getPath나 getAbsolutePath를 통해 확인하면 현재 디렉토리와 상위 디렉토리가 포함돼서 조회됩니다. 이럴 때 getCanonicalPath를 사용하면 현재 디렉토리와 상위 디렉토리가 포함되지 않습니다. 위의 예제 코드를 보면 현재 디렉토리와 상위 디렉토리가 포함되는 파일 위치를 조회하면 그대로 포함되는 것을 확인할 수 있습니다.(9~14라인) 하지만 현재 디렉토리와 상위 디렉토리가 포함되지 않는 파일 위치를 조회하면 포함되지 않는 것을 확인할 수 있습니다.(16~20라인) 정리하면 getPath는 현재 디렉토리를 기준으로 파일 위치를 조..
hashCode equals 자바에서 hashCode는 객체를 식별하는 정수로 두 객체의 hashCode 값이 같으면 동일한 객체로 판단됩니다. 위의 TmpObj 클래스를 보게 되면 num이라는 필드를 통해서 hashCode와 equal 메소드를 재정의한 것을 확인할 수 있습니다. 그리고 TmpObj 클래스의 객체 obj1과 obj2를 비교한 것을 보게 되면 두 객체의 주소값이 다르더라도 동일한 객체로 판단하는 것을 확인할 수 있습니다. 또한 num 필드만 같으면 str 필드는 관계없이 동일한 객체로 판단되는 것도 확인할 수 있습니다. 조금 더 정확하게 판단하고 싶다면 Set을 사용해서 확인하는 방법도 있습니다. 객체 비교하는 코드 작성할 때 사용하면 유용할 것 같습니다.
Java Reflection 자바에 Reflection이라는 API를 지원하는데 인스턴스의 구체적인 클래스 타입을 알지 못해도 해당 인스턴스 클래스에 접근할 수 있게 하는 API입니다. 예제 코드를 보면 TmpObj 클래스를 생성한 다음 Object 클래스로 받고 getNum 메소드를 호출합니다.(9~12라인) 메소드에 파라미터를 전달해야 하는 경우 getMethod에 파라미터 타입을 입력하고 호출합니다.(14~16라인) 파라미터가 2개 이상이면 getMethod에 파라미터 타입을 추가하면 됩니다. 예시) getMethod(int.class, String.class, Double.class) getField를 통해서도 필드에 접근할 수 있습니다.(18~20라인) 대신에 접근제한자가 public에 한해서만 가능합니다. Spring D..
Custom Exception 개발하다 보면 자바에서 정의한 예외 말고 개발자가 정의한 예외가 필요할 때가 있습니다. (예를 들면 파라미터가 사전에 정의한 규칙과 다른 경우) 위의 CustomException은 Exception클래스를 상속받아서 생성자 오버로딩을 통해 상황에 맞는 예외 클래스를 사용할 수 있게 했습니다. 파라미터가 필요 없는 경우(5~7라인) 예외 메시지가 필요한 경우(9~11라인) 예외가 발생한 원인 클래스가 필요한 경우(13~15라인) 위의 테스트 코드는 CustomException을 발생시키고 있는데 NullPointerException을 예외 발생원인으로 했습니다. 테스트 코드를 실행하면 CustomException이 제대로 발생되었음을 확인할 수 있습니다.
Java 시간 계산 자바에서 시간 계산할 때 주로 Calendar 클래스를 사용하는데 이렇게 하면 소스코드가 복잡해지기 때문에 저는 LocalTime, LocalDateTime, Duration 클래스를 사용합니다. 위의 예제는 2개로 나누어져 있는데 첫 번째는 두 개의 시간을 계산하고 있습니다. LocalTime 클래스를 통해서 특정 시간대 또는 현재 시간 LocalTime 인스턴스를 가져와서 시간 계산을 할 수 있습니다. LocalTime 클래스의 plusHours api에 음수/양수에 따라 시간을 이전/이후 시간을 설정할 수 있습니다. Duration 클래스의 getSeconds api를 통해 두 시간의 차이를 초 단위로 구할 수 있습니다. 두 번째는 두 개의 날짜를 계산하고 있습니다. LocalDateTime 클래스..
Java type casting 자바에서 형 변환할 때 일반적으로 강제 형 변환을 사용하는데 좋은 방법이 아닙니다. 강제 형 변환을 자주 사용하게 되면 RuntimeException이 발생하기 때문입니다. 위의 예제를 보게 되면 정수 타입을 실수 타입으로 변환할 때 float이면 "1f" , double이면 "1d"를 앞에 연산하면 각 타입에 맞게 변환이 됩니다. 반대로 실수 타입을 정수 타입 int로 변환할 때 실수 Wrapper 클래스의 intValue() api를 사용하면 정수 타입으로 변환됩니다. 그리고 문자열을 실수 타입과 정수 타입으로 변환하려면 각 숫자 Wrapper 클래스의 valueOf() api를 사용하면 됩니다. Wrapper 클래스를 잘 사용하면 형 변환 때문에 소스코드 가독성이 좋아지고 유지보수나 인수인계 때 효..