본문 바로가기

☕Java103

객체를 불변으로 만들기 위한 방어적 복사 참조형 변수를 멤버 변수로 사용하는 자바 객체의 경우 변수 취급에 주의해야 한다. 왜냐하면, 참조형 변수가 불변이 아닐 경우 외부에서 변경 가능해지는 등 부수효과가 크기 때문이다. 여기서는 가변 컬렉션의 예를 들어 이야기해보려고 한다. 컬렉션을 반환하는 getter가 단순히 멤버 필드를 그대로 반환할 경우 해당 필드가 참조형 변수이기 때문에 외부에서 요소를 추가, 수정, 삭제할 수 있게 된다. 이는 필드를 private으로 선언하여 객체를 은닉화한 이유를 없애버린다. 뿐만 아니라, 객체 생성 시 멤버 필드로 외부 컬렉션을 받아 올 경우, 해당 컬렉션을 외부에서 수정하면 같은 이유로 내부 멤버 컬렉션이 수정될 수 있다. 이러한 문제를 해결하기 위해 나온 개념이 방어적 복사이다. 외부에서 컬렉션이 수정될 것.. 2023. 12. 15.
일급 컬렉션이라는 용어에 대해서 일급 컬렉션이란 하나의 컬렉션 객체를 래핑하고 관련된 동작과 연산들을 정의해 놓은 객체를 말한다. 일급 컬렉션 사용은 ≪소트웍스 앤솔러지: 소프트웨어 기술과 혁신에 관한 에세이》의 객체지향 생활체조에서 언급된 이후 많은 자바 개발자 사이에서 인용되는 원칙 중 하나이다. 일급 컬렉션을 사용 및 권장하는 이유는 다음과 같다. 도메인에 특화된 자료 구조를 만들고 이름을 붙일 수 있다 자바에서는 컬렉션에 새로운 메서드를 추가할 수 없으므로 컬렉션을 래핑하는 방법을 사용해서 관련된 동작이나 연산을 정의하는 메서드를 추가할 수 있다. 래핑하는 객체에는 이름을 붙일 수 있으므로 해당 컬렉션에 대한 이름을 사용할 수 있게 된다. public class CustomerAccounts { private final List.. 2023. 12. 14.
날짜, 시간, 포맷팅 Date, Calendar Date - JDK 1.0부터 있던 클래스 Calendar - Date를 보완한 클래스. JDK 1.1부터 제공됨. Calendar Calendar 사용 시에는 static 메서드인 getInstance()로 생성. (GregorianCalendar, BuddhistCalendar 등 시스템 설정에 맞춰 알맞은 구현 클래스 반환해 줌) 현재 날짜를 설정할 때에는 Date 클래스가 여전히 필요하다. Date date = new Date(); Calendar calendar = Calendar.getInstance(); calenar.setTime(date); get(Calendar 상수들)로 날짜 시간 요소 가져올 수 있음. 차이 구할 때는 getTimeMillis()로 계산 후.. 2023. 7. 11.
Querydsl 사용을 위한 build.gradle 설정하기 Gradle + JPA + Querydsl 사용을 위해 build.gradle을 작성할 때 많은 경우, 플러그인을 추가하여 사용한다. 특히, 인프런 김영한 님 등 JPA를 전파하시는 분들의 강의 내용에 플러그인을 사용하여 설정하는 방법이 나와 있어서 구글 검색 내용 중 다수가 그렇게 사용하고 있다. 그러나 해당 방법에는 문제가 있다. (아래 프로젝트는 JDK 17, Spring Boot 3.x를 사용합니다.) Bad Case plugins { id 'java' id 'org.springframework.boot' version '3.0.6' id 'io.spring.dependency-management' version '1.1.0'.. 2023. 5. 14.
728x90