Java

Java

[Java] Comparator와 Comparable - 경험을 기록하는

Comparator와 Comparable객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스기본적으로 정렬(자리바꿈)은 대상과 기준이 필요하다.Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용Comparable : 기본 정렬기준을 구현하는 데 사용public interface Comparator { int compare (Object o1, Object o2); // o1, o2 두 객체를 비교 boolean equals (Object obj); // equals를 오버라이딩하라는 뜻}public interface Comparable { int compareTo (Object o); // 주어진 객체 (o)를 자신과 비교}compare()와 comp..

개발지식

안전한 Java 클래스 설계하기

안전한 클래스 설계를 설명하기 전에 Java에서 클래스에 대해 간략하게 설명하자면 클래스는 코드를 작성하기 위한 초기 단계, 즉 객체 설계도의 역할을 합니다. 객체 == 클래스라고 혼동해서는 안됩니다. 객체를 표현하기 위한 수단이 클래스일 뿐입니다. 1. 생성자를 통한 변수 초기화 public class User { private String name; private Team team; public User(String name, Team team) { this.name = name; this.team = team; } } 생성자를 통해 변수를 초기화하면 예상하지 못한 값이 들어올 수 있다. 매개변수에 전혀 관계가 없는 값을 넣거나 null을 넣어도 할당이 가능하기 때문이다. //잘못된 값 초기화 Use..

개발지식

DTO(Data Transfer Object)의 사용범위와 특징

DTO란? DTO란 Data Transfer Object의 약자로, 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체이다. 여기서 계층이란 Presentation(View, Controller), Business(Service), Persistence(DAO, Repository)를 의미한다. DTO의 특징 데이터를 저장하는 용도로만 사용되어야 한다. 데이터에 대한 getter, setter 만을 가져야 한다. 저장, 조회를 제외한 어떠한 비즈니스 로직도 있어서는 안 된다. 하지만, 데이터 전송을 위해 직렬화, 역직렬화 메커니즘은 포함할 수 있다. 직렬화란 객체를 JSON, XML, 바이트스트림 등으로 변환하는 것을 의미한다. 역직렬화는 직렬화의 반대이다. 도메인 대신 DTO를 사용하는 이유 ..

Java

객체지향의 다형성에 대해(간단 설명)

학습목표 객체지향의 의미 장점 객체지향 - 다형성 역할과 구현을 분리 예시 1 - 자동차 자동차 역할이 있다. 구현 - 아반떼, K3, 테슬라 모델 3 운전면허를 가진 사용자는 아반떼를 타다가 k3를 타도 새로 공부를 할 필요가 없다. 운전을 하던 대로 하면 된다. 자동차의 종류가 어떤 것 인지는 중요하지 않다. 예시 2 - 공연(로미오와 줄리엣) 로미오 역할과 줄리엣 역할이 있다. 구현 - 로미오, 줄리엣을 공연하는 사람 로미오와 줄리엣 역할을 연기할 수 있는 사람이라면 누가 그 역할을 하던지 중요하지 않다. 다른 예시 키보드, 마우스, 세상의 표준 인터페이스들 정렬 알고리즘(어떤 알고리즘을 사용하던 중요 X) - 기능만 똑같다면 더 나은 성능의 알고리즘으로 교체해도 무관하다. 할인 정책 로직 정리 역..

SpringBoot 쇼핑몰 만들기

[일곱 번째 기록] Thymeleaf

Thymeleaf화면을 동적으로 만들 수 있는 템플릿 엔진 미리 정의된 템플릿(Template)을 만들고 동적으로 HTML 페이지를 만들어서 클라이언트에 전달하는 방식요청이 올 때마다 서버에서 새로운 HTML을 만들어 주기 때문에 SSL 서버 사이드 렌더링이라 한다. 1. 특징'natural templates'  확장자명 .htmlThymeleaf문법은 html 태그 안쪽 속성으로 사용된다. 2. thymeleaf_basicItemDto 연습용 Controller 생성 hello.example.controller.ThymeleafExController  hello.example.dto.ItemDto 클래스 생성데이터를 주고받을 때는 Entity 클래스 자체를 반환X 데이터 전달용 객체(Data Trans..

SpringBoot 쇼핑몰 만들기

[여섯 번째 기록] Querydsl

Querydsl SQL, JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API JPA Criteria에 비해서 편리하고 실용적이다 1. Querydsl 장점 고정된 SQL문이 아닌 동적으로 쿼리를 생성할 수 있다. 쿼리 재사용 제약 조건 조립 및 가독성 향상 문자열X 자바 소스코드로 작성 -> 컴파일 시점에서 오류 발견 가능 IDE의 도움으로 자동완성이 가능 -> 생산성 향상 2 build.gradle 설정 사용하기에 앞서 몇 가지 설정이 필요하다. // 1. queryDsl version 정보 추가 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.4' id 'io...

SpringBoot 쇼핑몰 만들기

[다섯 번째 기록] @Query 어노테이션

Spring Data JPA @Query SQL과 유사한 JPQL을 사용하여 복잡한 쿼리를 처리할 수 있게 도와주는 기능 간단한 쿼리는 "쿼리 메서드"를 사용해도 되지만 조건이 2가지 이상이면 되도록 @Query를 사용 SQL과 JPQL의 차이점 SQL JPQL DB의 테이블을 대상으로 쿼리 엔티티 객체를 대상으로 쿼리(객체지향 쿼리) 특정 DB에 종속적이다 (DB마다 SQL이 조금씩 다르다) 특정 DB에 종속적X (SQL을 추상화해서 사용, JPQL로 작성하면 SQL로 변환된다) 1. @Query사용(JPQL) @Query("JPQL") 쿼리 어노테이션 안에 JPQL로 작성한 쿼리문을 넣어준다. from 뒤에는 엔티티인 Item을 넣어주고 as로 i(별칭)를 지정 as는 생략 가능 별칭 생략 불가 e...

SpringBoot 쇼핑몰 만들기

[네 번째 기록] 쿼리 메서드(SpringDataJPA)

쿼리 메서드 쿼리 메서드는 스프링 데이터 JPA에서 제공하는 핵심 기능 중 하나 Repository 인터페이스에 간단한 네이밍 룰을 이용하여 메서드를 작성하면 원하는 쿼리를 실행할 수 있다.(엔티티 이름 생략 가능) 자세한 방법 : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods 1. ItemRepository에 findByItemName 추가 2. ItemRepositoryImpl에서 findByItemName 구현 JPQL을 이용하여 findyItemName을 구현한다. 3. findByName 테스트 ItemRepositoryTest.class에 findBynameTest메서드 추가 @Sprin..

SpringBoot 쇼핑몰 만들기

[세 번째 기록] 상품 Repository 설계하기

1. ItemRepository 생성 hello.example.repository.ItemRepository.java 생성 OCP와 DIP를 지키기 위해 ItemRepository를 Interface로 생성 2. 테스트 전용 환경을 위한 application-test.properties 생성 H2 DB를 시스템의 메인 메모리에서(JVM 위에서) 구동시키는 방식으로 가볍고 빠르다는 장점이 있다. 3. ItemRepositoryImpl 생성 hello.example.repository.ItemRepositoryImpl.java 생성 ItemRepository를 구현한다. EntityManager를 생성자 주입받기 위해 제어자인 final과 Lombok의 @RequiredArgsConstructor 애노테이션..

SpringBoot 쇼핑몰 만들기

[두 번째 기록] 상품 Entity 설계하기

1. 상품 판매상태를 enum 클래스로 정의 enum 클래스에 대한 설명 hello.example.constant.ItemSellStatus.java 생성 상품의 현재 판매상태(판매, 품절)를 나타 내는 상수(SELL, SOLD_OUT) 2. 상품 클래스 생성 hello.example.domain.Item.java 생성 상품의 현재 판매상태는 enum타입의 ItemSellStatus변수를 갖는다. 상품 조회를 위한 @Getter선언과 Item클래스를 문자열로 출력해주는 @ToString선언 정적 팩토리 메서드를 사용할 예정이기 때문에 @Setter는 사용하지 않았다. 3. 상품 클래스 생성(+어노테이션) hello.example.domain.Item.java 생성 Table Schema을 위한 어노테이션..

여행하는 개발자(SOO)
'Java' 태그의 글 목록
상단으로