1. 객체 타입
package dev.kloz.sample.boot.main.dto;
import java.util.ArrayList;
import lombok.Builder;
import lombok.Data;
@Builder
@Data
public class MainDto {
Item data;
ArrayList<Item> List;
@Data
public static class Item {
String itemName;
String itemNo;
}
}
Item 클래스에 itemName, itemNo 변수를 담고
Item 타입의 data 변수를 선언했으므로 itemName과 itemNo를 가진 객체 하나를 담을 수 있고
List는 ArrayList이므로 Item 객체를 여러 개 담을 수 있다.
활용 예시
import dev.kloz.sample.boot.main.dto.MainDto;
import dev.kloz.sample.boot.main.dto.MainDto.Item;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 1. Item 객체 하나 만들기
Item singleItem = new Item();
singleItem.setItemName("사과");
singleItem.setItemNo("001");
// 2. 여러 개의 Item 객체 만들기
Item item1 = new Item();
item1.setItemName("바나나");
item1.setItemNo("002");
Item item2 = new Item();
item2.setItemName("포도");
item2.setItemNo("003");
// 3. 리스트에 담기
ArrayList<Item> itemList = new ArrayList<>();
itemList.add(item1);
itemList.add(item2);
// 4. MainDto에 담기
MainDto mainDto = MainDto.builder()
.data(singleItem) // 하나짜리 상품
.List(itemList) // 여러 개 상품 리스트
.build();
// 5. 출력
System.out.println("data: " + mainDto.getData().getItemName()); // 사과
System.out.println("List:");
for (Item i : mainDto.getList()) {
System.out.println("- " + i.getItemName() + " / " + i.getItemNo());
}
}
}
출력
data: 사과
List:
- 바나나 / 002
- 포도 / 003
● 만약 System.out.println(itemList); 할 경우
ArrayList를 출력(Item객체가 두 개 들어있는)하는 것이다.
출력
[MainDto.Item(itemName=바나나, itemNo=002), MainDto.Item(itemName=포도, itemNo=003)]
● Java의 기본 ArrayList는 내부에 들어 있는 객체들의 toString()을 호출해서 보여준다.
● @Data 어노테이션이 자동으로 toString()해서 만들어주지만, toString()을 직접 오버라이드해서 만들 수 있다.
public static class Item {
String itemName;
String itemNo;
@Override
public String toString() {
return "상품명: " + itemName + ", 상품번호: " + itemNo;
}
}
출력
[상품명: 바나나, 상품번호: 002, 상품명: 포도, 상품번호: 003]
ArrayList 출력 형태
| 방법 | 출력 형태 |
| Lombok 자동 (@Data) | Item(itemName=값, itemNo=값) |
| 직접 작성한 toString | 상품명: 값, 상품번호: 값 (원하는 형식으로 가능!) |
2. Builder Pattern
: 객체를 만들 때 하나씩 골라담는 것처럼 만드는 방법
서브웨이에서 시킬 때 빵은 플랫, 치즈는 모짜렐라, 야채는 전부. 이런식으로 선택하듯이
Subway sandwich = Subway.builder()
.bread("플랫")
.cheese("모짜렐라")
.veggie("전부")
.build()
하나씩 골라서 설정한 뒤 마지막에 build() 해주면 서브웨이 객체가 나온다.
MainDto mainDto = MainDto.builder()
.data(singleItem) // 하나짜리 상품 넣고
.List(itemList) // 여러 상품 리스트 넣고
.build(); // 만들기 끝!
// 생성자 사용하면 이렇게 헷갈림
MainDto dto = new MainDto(singleItem, itemList);
어떤 값이 어떤 값인지 구체적으로 확인할 수 있기 때문에 builder pattern 이 보기 편하다.
또 필요한 것만 고를 수도 있다.
MainDto dto = MainDto.builder()
.List(itemList) // data는 안 넣고
.build();
'웹 개발 > 개념 정리' 카테고리의 다른 글
| SpringBoot, Vue 의 포트(port) 역할 (2) | 2025.05.22 |
|---|---|
| @RequiredArgsConstructor (0) | 2025.05.21 |
| `` 백틱, ${}, {{}} (0) | 2025.05.14 |
| AJAX vs SPA(Single Page Application) (0) | 2025.05.14 |
| 절대 경로, 상대 경로 (0) | 2025.05.14 |