728x90

JAVA 27

try-catch block에서 finally 블록이 필요한 이유

컴파일할 때는 문제가 없던 프로그램도 동작 도중에 종종 오류가 발생한다. 사용자가 항상 개발자의 생각대로 프로그램을 사용하지 않기 때문이다. 숫자만 입력해야하지만 문자열을 입력하기도 하고, 파일을 업로드하기 전 파일의 이름을 지정하지 않기도 한다. 이럴 때 발생하는 오류를 사전에 방지하는 것은 중요하다. 그런데 개발자가 이러한 오류가 발생할 때마다 프로그램이 종료되는 것을 원치 않을 수 있다. 오류를 무시하고 싶을 수도 있고, 그 오류가 발생 했을 때 수행할 적절한 동작을 직접 정의하고 싶을 수도 있다. 이럴 때 활용하는 것이 try-catch-finally 구문이다. public class Main { public static void main(String[] args) { int [] arr = ne..

JAVA 2024.04.16

Java에서 큰 수를 다룰 때 쓰는 자료형이란? (BigDecimal 에 관해)

BigDecimal을 쓰는 이유 Test 자바는 IEEE 754 부동 소수점 방식을 사용해서, 정확한 실수를 저장하지 않고 최대한 완벽에 가깝기를 바라는 근사치 값을 저장하기 때문에 통과하지 못한다. 금융권에서 달러를 다루는 개발자가 double을 이용해서 이런 사소한 값 차이가 발생한다면 부동 소숫점 방식이 아닌, 정수를 이용해 실수를 표현하는 java.math.BigDecimal 클래스를 사용해야 한다. 따라서, Java 언어에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수다. 변수 intValue : 정수. 정수를 저장하는데 BigInteger를 사용한다. scale : 지수. 정확히는 소수점 첫째 자리부터 0이 아닌 수로 끝나는 위치까지의 총 소수점 자리수이다. precisio..

JAVA 2024.04.06

Equals() 메소드 정의할 때 hashcode 함수를 정의해야 하는 이유

equals와 hashCode는 같이 재정의하라는 말을 다들 한 번쯤 들어봤을 것이다. 대부분의 IDE Generate 기능에서도 equals와 hashCode를 같이 재정의해주며 lombok에서도 EqualsAndHashCode 어노테이션으로 같이 재정의해준다. equals만 재정의할 경우 우선 예제로 사용될 Car 클래스를 살펴보자. public class Car{ private final String name; public Car(String name){ this.name = name; } // intellij Generate 기능 사용 @Override public boolean equals(Object o){ if (this == o) return true; if (o == null || get..

JAVA 2024.04.01

Java Office365 SMTP 메일발송 실패

javax.mail.AuthenticationFailedException 에러를 발생하며 메일발송이 실패 javax.mail.Session의 setDebug(true)로 디버깅 결과 421 4.7.66 TLS 1.0 and 1.1 are not supported. Please upgrade/update your client to support TLS 1.2. Visit https://aka.ms/smtp_auth_tls. We intend to make a final announcement when we are ready to make the change to disable TLS1.0 and TLS1.1 for SMTP AUTH for the regular endpoint. 를 확인할 수 있다. 따라서..

JAVA 2023.10.23

배열 선언 및 초기화(initialization)

배열(Array) 이란? 배열(Array)이란 선형 자료구조(Data Structure)중 하나로, 동일한 타입의 연관된 데이터를 메모리에 연속적으로 저장하여 하나의 변수에 묶어서 관리하기 위한 자료 구조입니다. 가장 기본적인 자료구조인 만큼 C,Java,Python등 거의 모든 언어에 구현되어 있습니다. 배열의 길이는 최초 선언한 값으로 고정되며 위와 같이 인덱스(Index)를 통해 데이터에 접근 할 수 있습니다. 배열(Array) 선언 및 초기화 배열을 선언할때 참조변수만 먼저 선언하여 크기 및 값을 이후에 초기화 하는 것도 가능하고 최초 선언시 부터 배열의 크기 및 값을 할당해 주는 것도 가능합니다. 아래는 여러가지 방법으로 배열을 선언하고 초기화 하는 예제입니다. //크기 할당 & 초기화 없이 배..

JAVA 2023.09.24

생성자란?

인스턴스를 생성할 때 "클래스 객체변수 = new 클래스();" 라는 구문을 사용하고 이때 "클래스();"는 생성자를 호출하는 의미 생성자(Constructor) 생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드(하지만 메소드와는 다르다.)이다. 생성자는 인스턴스 변수(필드 값 등)를 초기화 시키는 역할을 한다. 생성자 선언 방법 생성자를 선언하는 방법은 위에 내용과 같다. 클래스라는 부분은 생성자를 정의하는 클래스의 이름과 동일하게 적어줘야 한다. 빨간색으로 표시한 부분은 필수로 적어야 하는 내용은 아니다. public에 대한 내용은 나중에 다룰 예정이고 우선은 생성자를 선언할 때는 public을 적어주면 된다. 생성자 종류 및 사용 위에서 생성..

JAVA 2022.12.28

StringUtils.equals() 와 String.equals()의 비교

//null값이 들어가 있는 경우 String str1 = null; String str2 = "Hello World~!"; //String 자체 equals() 사용 시 NullPointerException 발생 str1.equals(str2); //StringUtils.equals() 사용 시 정상 처리 StringUtils.equals(str1, str2); 위에 결과 처럼 String.equals() 일 경우, 매개변수에 null이 입력되면 NullPointerException이 발생됩니다. 따라서 StringUtils.equals()로 문자열을 비교하는 것이 더 안전한 방법이 될 것 같습니다. 참고: https://blog.naver.com/seek316/222347033258 [Java] Ap..

JAVA 2022.12.23

LocalDateTime 으로 시간관련 변환 정리

Java8 LocalDateTime을 비롯해 여러가지 시간을 처리하는 클래스 예제 정리 1.년월일 시분초 지정해서 LocalDateTime생성하기 LocalDateTime now = LocalDateTime.now(); LocalDateTime ldt = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), now.getHour(), 0, 0); LocalDateTime.of()를 쓰면 년월일 시분초를 직접 지정 할 수 있습니다. 위 코드는 분, 초는 0으로 설정하는 코드입니다. 결과 2022-04-03T12:00 2.yyyy-mm-dd hh:mm:ss형식의 String을 LocalDateTime으로 바꾸기 String으로 되어 있는 ..

JAVA 2022.12.19

SimpleDataFormat 함수 사용법(feat. 날짜 관련)

Date클래스를 이용하여 현재 날짜를 출력하면 영문으로 된 날짜를 리턴한다. 특정 문자열 포맷으로 얻고 싶으면 java.text.SimpleDateFormat 클래스를 이용하면 된다. 다음은 오늘 날짜를 yyyy 년 MM월 dd일로 출력하는 예제이다. package testProject; import java.text.SimpleDateFormat; import java.util.Date; public class simpleDateFormatEx { public static void main(String[] args) { Date nowDate = new Date(); System.out.println("포맷 지정 전 : " + nowDate); SimpleDateFormat simpleDateForma..

JAVA 2022.12.16

람다식 중간연산 정리 (map, filter, reduce, collect)

stream 인터페이스를 사용하여 람다식을 기존 JAVA코드(명령형 스타일)와 비교 아래에 소개하는 4개의 메서드를 간단히 설명하면 map()은 엘리먼트 변경, filter()는 엘리먼트 선택, reduce(), collect()는 엘리먼트를 하나로 리턴 이다. 1. map() map 메서드는 입력 컬렉션을 출력 컬렉션으로 매핑하거나 변경할때 유용하다. 예제 코드 list의 엘리먼트 값을 모두 대문자로 변경하여 출력. final List names = Arrays.asList("Sehoon", "Songwoo", "Chan", "Youngsuk", "Dajung"); //java 7 System.out.println("java 7"); for(String name : names) { System.out...

JAVA 2022.10.19
728x90