inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

상품 도메인 개발

ArrayList로 감싸서 반환하는 이유

585

Lego

작성한 질문수 20

0

5:50쯤에 ArrayList로 감싸서 반환하는 이유를 말씀하시는데 납득이 안되는데 부연설명 가능할까요?

spring mvc

답변 1

2

David

안녕하세요. Lego님, 공식 서포터즈 David입니다.

Map의 values를 그대로 반환하게 되면 외부(ItemRepository)에서 Map 내 element를 삭제할 수 있게 됩니다. 그런데 강의와 같이 ArrayList로 한 번 감싸게 되면 Map의 values에 변경을 가할 수 없게 됩니다. 이런 이유로 ArrayList로 한 번 감싼 것입니다.

자세한 동작은 아래 테스트 코드를 참고해 주세요.

public class MapTest {

    @Test
    void removeElementFromMapValues() {
        Map<String, Item> itemMap = new HashMap<>();
        itemMap.put("David", new Item("David"));
        itemMap.put("Sophie", new Item("Sophie"));

        System.out.println("Original Map Values");
        itemMap.values().forEach(System.out::println);

        Collection<Item> values = itemMap.values();
        values.remove(new Item("David"));

        System.out.println("Modified Map Values");
        itemMap.values().forEach(System.out::println);
    }

    @Test
    void removeElementFromNewArrayListWithMapValues() {
        Map<String, Item> itemMap = new HashMap<>();
        itemMap.put("David", new Item("David"));
        itemMap.put("Sophie", new Item("Sophie"));

        System.out.println("Original Map Values");
        itemMap.values().forEach(System.out::println);

        List<Item> items = new ArrayList<>(itemMap.values());
        items.remove(new Item("David"));

        System.out.println("ArrayList Items");
        items.forEach(System.out::println);

        System.out.println("Original Map Values");
        itemMap.values().forEach(System.out::println);
    }

    static class Item {

        private String name;

        public Item(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Item item = (Item) o;
            return Objects.equals(name, item.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(name);
        }

        @Override
        public String toString() {
            return "Item{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
}

감사합니다.

servlet과 container에 대한 질문입니다

0

25

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

64

1

jsp 의존성 수정 요청

0

79

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

143

1

save() 메서드 문의

0

67

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

101

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

97

1

RequestMapping을 이용한 핸들러, 어댑터

0

119

2

save 후 결과화면

0

89

2

jsp를 이용한 view

0

97

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

178

1

수업 코드 제공 관련 문의

0

97

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

100

3

파일 오픈 시

0

70

1

스프링 배치 관련

0

78

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

112

1

postman으로 /request-body-json-v1 호출시 500 error

0

96

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

79

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

75

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

139

1

html 변경하는 부분 적용 문제

0

103

1

한글 깨짐

0

76

2