목적종속적인 객체의 집합을 생성하는 인터페이스를 제공구체적인 클래스 명시 없이도 객체의 집합을 생성가능하다.의의유현성과 확장성 증대구체적인 팩토리 클래스를 캡슐화일련의 관련 객체 생성가능인터페이스를 통해 객체를 생성하고 조작가능시스템의 독립성과 확장성이 증대된다.버튼과 체크박스를 통한 팩토리 메서드public interface Button { void render(); }버튼이라는 인터페이스render 하는 기능을 구현을 강제하기 위하여 생성// Concrete Product A1 class RoundButton implements Button { public void render() { System.out.println("Rendering Round Button"); } } // Concrete Pro..
정의객체를 생성하는 인터페이스를 제공함.어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브 클래스에서 이루어지게 한다.객체의 생성로직을 클라이언트 코드에 노출시키지 않음.예제// Abstract Product interface Logger { void log(String message); }Logger 인터페이스 생성 // Concrete Product 1 class FileLogger implements Logger { public void log(String message) { System.out.println("Logging to a file: " + message); } } // Concrete Product 2 class ConsoleLogger implements Logger { public..
현재 버전Java 11Spring Boot 2.7.xschema.sql-- 테이블 생성 SQL - SHOPPING_CART CREATE TABLE SHOPPING_CART ( `ID` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'pk값', `USER_ID` VARCHAR(200) NULL COMMENT '유저ID', `PRODUCT_ID` BIGINT NULL COMMENT '상품ID', `QUANTITY` INT NULL COMMENT '장바구니 상품 수량', `CREATED_DATE` TIMESTAMP NULL COMMENT '생성일', `UPDATED_DATE` TIMESTAMP NULL COMMENT '수정일', PRIMARY KEY (ID) );DB에 입력-- auto..
소개Mybatis 는 XML 매핑으로 진행하는 게 일반적이긴하다.하지만 어노테이션만으로도 XML 없이 쿼리를 정의할 수 있다.다만 , 동적쿼리는.. xml 파일을 별도로 정의해주긴해야한다.어노테이션 사용@Mapper @Repository public interface CartMapper { // ... @Results(value = { // ... }) @Select("SELECT ...") Cart selectCartByUserId(@Param("userId") String userId); }쿼리 정의@Select 어노테이션으로 SQL 쿼리를 정의하고, @Param 으로 쿼리 파라미터를 정의함결과 매핑@Results와 @Result 어노테이션을 사용하여 쿼리 결과를 도메인 객체에 매핑합니다.관계 매핑@..
SOFT DELETE ?? HARD DELETE??정의soft delete데이터를 실제로 삭제하지 않고,삭제된 것 처럼 표시하는 방법hard delete데이터를 DB에서 영구적으로 제거하는 방법장바구니의 특성사실 장바구니를 다시 복구할 일이 없다면 hard delete 를 수행해도 문제가 없을 것 같다하지만,! 혹여나 시스템상에서 사용자의 삭제 의도와 장바구니 ↔ 주문 로직간의 문제가 발생하는 경우 사용자의 의도 파악쉬운 디버깅을 위해 SOFT DELETE 를 수행하는 것이 어떨까 생각도 해보았다.삭제하는 경우 DELETED_DATE 컬럼이 처음에는 비어있다가, 날짜가 기입되는 경우 삭제된 걸로 데이터만 들고오게 하는 것이다.솔직히 굳이굳이 싶기도한데.. 혹시나 모르는 것 아닌가 일단 SOFT_DELET..