본문 바로가기

분류 전체보기268

객체를 불변으로 만들기 위한 방어적 복사 참조형 변수를 멤버 변수로 사용하는 자바 객체의 경우 변수 취급에 주의해야 한다. 왜냐하면, 참조형 변수가 불변이 아닐 경우 외부에서 변경 가능해지는 등 부수효과가 크기 때문이다. 여기서는 가변 컬렉션의 예를 들어 이야기해보려고 한다. 컬렉션을 반환하는 getter가 단순히 멤버 필드를 그대로 반환할 경우 해당 필드가 참조형 변수이기 때문에 외부에서 요소를 추가, 수정, 삭제할 수 있게 된다. 이는 필드를 private으로 선언하여 객체를 은닉화한 이유를 없애버린다. 뿐만 아니라, 객체 생성 시 멤버 필드로 외부 컬렉션을 받아 올 경우, 해당 컬렉션을 외부에서 수정하면 같은 이유로 내부 멤버 컬렉션이 수정될 수 있다. 이러한 문제를 해결하기 위해 나온 개념이 방어적 복사이다. 외부에서 컬렉션이 수정될 것.. 2023. 12. 15.
일급 컬렉션이라는 용어에 대해서 일급 컬렉션이란 하나의 컬렉션 객체를 래핑하고 관련된 동작과 연산들을 정의해 놓은 객체를 말한다. 일급 컬렉션 사용은 ≪소트웍스 앤솔러지: 소프트웨어 기술과 혁신에 관한 에세이》의 객체지향 생활체조에서 언급된 이후 많은 자바 개발자 사이에서 인용되는 원칙 중 하나이다. 일급 컬렉션을 사용 및 권장하는 이유는 다음과 같다. 도메인에 특화된 자료 구조를 만들고 이름을 붙일 수 있다 자바에서는 컬렉션에 새로운 메서드를 추가할 수 없으므로 컬렉션을 래핑하는 방법을 사용해서 관련된 동작이나 연산을 정의하는 메서드를 추가할 수 있다. 래핑하는 객체에는 이름을 붙일 수 있으므로 해당 컬렉션에 대한 이름을 사용할 수 있게 된다. public class CustomerAccounts { private final List.. 2023. 12. 14.
도메인 모델, 엔티티, DTO, VO 차이 정리 각 객체들의 의미를 살펴보고 어떤 차이가 있는지 알아보자. 각 객체들의 관계를 그림으로 나타내 보았다. 기본적으로 도메인 모델, 엔티티, DTO, VO는 객체(Object)이다. 일단 크게는 도메인 모델 객체, DTO, VO로 나눠 볼 수 있다. 도메인 모델 객체 도메인 모델 객체(domain model object)는 어떤 도메인에 속하는 모델 객체를 가리킨다. 도메인은 해결하고자 하는 문제가 속하는 "영역"을 의미하는데, 온라인 쇼핑몰이나 여행 예약 사이트 등 서비스 종류를 도메인으로 볼 수 있다. 이 도메인은 다시 회원, 상품, 주문, 예약 등 하위 도메인으로 분해될 수 있다. 이처럼 도메인 자체는 영역 또는 범위를 의미할 뿐이고 도메인 모델은 이러한 도메인에서 사용되는 모델을 말하는데, 모델이란 .. 2023. 12. 13.
primary key 필드 타입은 원시형과 래퍼 클래스 중 어느 것을 사용해야 할까? @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Builder @Data public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_no") private Long id; //... } 이번에 기존 프로젝트 코드 리팩터링을 진행하면서 PK(기본키) 필드 타입을 무엇으로 하는 것이 맞는 건지 생각해 보게 되었다. 원시형 타입과 래퍼 클래스, 두 가지 경우가 가능하지만, 하이버네이트 공식 문서에서 래퍼 클래스를 사용을 권장해서 래퍼 클래스를 주로 사용하는 것으로 알고 있었는데, null 가능성을 열.. 2023. 12. 3.
728x90