JAVA(28)
-
정적 팩토리 메서드
위 포스팅은 이팩티브 자바를 읽고 정적 팩토리 메서드에 대해서 정리한 글입니다. 객체의 생성과 파괴 정적 팩토리 메서드를 보자마자 든 생각은 프로젝트에서 자주 사용하고 있는 내 코드이다. public static Member createMember(String email, String mId, String password, String name){ Member member = Member.builder() .email(email) .loginId(mId) .password(password) .name(name) .build(); return member; } 위 코드에서는 정적 팩토리 메서드를 객체의 생성을 담당하는 역할로 사용하고 있다. 이번 포스팅에서는 위 방식으로 정적 팩토리 메서드를 사용하는 것이..
2023.05.23 -
인터페이스 default 메서드와 static 메서드
자바 8버전 이후부터 인터페이스에 기본 메소드(default 메서드)와 static 메서드를 사용할 수 있게 되었다. 왜 인터페이스는 default 메서드를 추가하였을까?? 디폴트 메서드를 이용하면, 자바 API의 호환성을 유지하면서 라이브러리를 바꿀 수 있다. 디폴트 메서드는 다중 상속 동작이라는 유연성을 제공한다. 라이브러리 설계자 입장에서 인터페이스에 새로운 메서드를 추가하는 등 인터페이스를 바꾸고 싶을 때 문제가 발생한다. 왜냐하면, 인터페이스를 바꾸면 이전에 해당 인터페이스를 구현했던 모든 클래스의 구현도 고쳐야하기 때문이다. 이러한 문제를 해결하기 위해, 자바 8버전 이후부터는 인터페이스에 디폴트 메서드나 정적 메서드를 사용할 수 있게 되었다. ⇒ 인터페이스에 디폴트 메서드를 구현하면, 이 인..
2023.04.27 -
enum 이 자식!!
enum이 뭘까?? enum이란 Enumeration의 앞 글자로 열거라는 의미를 갖습니다. 자바에서는 보통 static final을 사용해 상수를 선언하는 데, 상수만을 정의하는 클래스가 필요하다면 enum을 사용할 수 있습니다. enum은 다음과 같이 사용될 수 있습니다. public enum LevelOfXp { ONE(1L,100), TWO(2L,300), THREE(3L,600), FOUR(4L,1000), FIVE(5L,999999999); private final Long level; private final Integer requiredXp; LevelOfXp(Long level, Integer requiredXp) { this..
2023.03.01 -
Date, Callender 클래스 LocalDateTime 클래스 + mysql과의 연결
Date와 Callender의 문제점 Date와 Callender의 문제점 불변 객체가 아니다. → 멀티 쓰레드 환경에서 변경 가능한 객체는 데이터가 잘못될 가능성이 있다. int상수를 남용해 엉뚱한 숫자가 들어갔을 때 확인 하기 어려움 월 지정이 매우 헷갈리고 두 클래스의 요일 상수에 일관성이 없음 예를 들어) Calendar.MARCH는 2이다… LocalDate클래스와 LocalTime클래스 java.time 패키지의 가장 기본이 되는 클래스이다. LocalDate today = LocalDate.now(); //오늘의 날짜 LocaTime time = LocalTime.now(); //현재 시간 LocalDate birthDate = LocalDate.of(1999, 01, 01); LocalTi..
2022.09.26 -
람다식에 관하여
람다식이란? 메서드를 하나의 ‘식’으로 표현한 것이다. 람다식을 사용함으로써 자바는 객체지향언어인 동시에 함수형 언어의 기능을 갖추었다. 함수형 언어란 무엇인가?? 이를 알기위해서는 메소드와 함수의 차이를 알아야한다. 객체지향개념에서 메서드는 객체의 행위나 동작을 의미하고 메서드는 반드시 클래스에 속해있어야합니다. 반대로, 함수는 클래스에 속해있을 필요가 없습니다. 따라서, 람다식을 사용함으로써 함수형언어의 기능을 사용한다고 하는 것은 클래스에 있는 메서드를 사용하지 않고도, 함수처럼 클래스 밖에서 메서드를 만들어서 사용할 수 있다는 것을 의미합니다. (단순히 제 생각입니다) 람다식은 익명 클래스의 객체와 동일합니다. 아래의 코드를 보면 이 말이 이해가 됩니다. interface Example{ publ..
2022.09.23 -
Optional<T>에 관하여
Optional가 필요한 이유는 아래와 같다. null을 직접 다루는 것이 위험하다 -> NullPointerException 발생할 수 있음 null 체크하려면 코드가 길어진다.(if문 사용해서 null 체크 해야된다.) => Optional를 사용하면 항상 null이 아니다. Optional 클라스는 아래와 같다. public final class Optional{ private final T value; ... } Optional의 메서드들은 아래와 같다. 객체 생성 Optional opt = Optional.of("abc"); 빈 객체로 초기화 Optional opt = Optional.empty(); Optional 객체의 값 가져오기 Optional opt = Optional.of("abc")..
2022.09.01