안녕하딤니카? 재영입니다. 😎
Java 8 버전을 사용하고 있는데 저처럼 갑자기 asIterator 메서드를 사용할 일이 생겼다 싶다면
물론 필요에따라 11 버전으로 올리는게 정신건강에 좋을 수도 있지만
저처럼 일단 세팅 해 둔 8로 꾸역꾸역 써보고 진짜 최후의 순간에 11 버전으로 올리고 싶다 하시는 분들을 위한 글
은 아니고 그냥 제가 까먹을까봐 써놓는 글입니다
asIterator 메서드와 동일한 역할을 하는 코드 작성법
먼저 우리를 당황하게 만들어준 asIterator 메서드의 역할이 뭔지 알아보겠습니다
- Enumeration 객체를 Java 8의 스트림(Stream) API와 함께 사용할 수 있도록 변환해주는 도우미 메서드
- Java 8 이전에는 Enumeration을 이용하여 컬렉션 요소를 순회하는 것이 일반적이었다. 그러나 Java 8부터는 스트림(Stream) API가 도입되었는데, 스트림을 사용하면 컬렉션 데이터를 보다 편리하게 처리할 수 있게됨.
- asIterator() 메서드는 Java 9부터 추가된 메서드. Enumeration을 스트림으로 변환하기 위한 목적으로 도입되었으며, 스트림을 사용하면 데이터를 처리하는데 있어서 병렬 처리 등의 장점을 활용할 수 있고, 간결하고 가독성 있는 코드를 작성할 수도 있다
그니까 한 줄 요약 하자면
Enumeration 보다 더 간결하고 직관적인 코드로 만들어주는 친구가 asIterator 라는 말입니다
저 같은 경우에는 스프링 MVC 공부를 하기 전에 서블릿 먼저 살펴보던 중,
HTTP 스펙이 제공하는 요청, 응답 메시지 중 헤더 정보를 콘솔창에 출력해보고싶었습니다
그럼 이제 Enumeration 를 사용한 코드랑 asIterator 을 사용한 코드를 같이 봅시다
1. Enumeration 를 활용한 HTTP 헤더의 모든 정보를 콘솔창에 출력하는 코드
private void printHeaders(HttpServletRequest request) {
System.out.println("--- Headers - start ---");
// Java 8 환경에서도 사용할 수 있는 Enumeration 메서드를 활용한 헤더 정보 출력 코드
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println(headerName + ": " + request.getHeader(headerName));
}
System.out.println("--- Headers - end ---");
System.out.println();
}
Enumeration을 사용하면 헤더 while 문이 돌면서 콘솔창에 헤더 정보가 sout 됩니다
자 그럼 여기서 asIterator 를 쓰면 어떻게 코드가 간결해지는지 보겠습니다
2. asIterator 를 활용한 HTTP 헤더의 모든 정보를 콘솔창에 출력하는 코드
private void printHeaders(HttpServletRequest request) {
System.out.println("--- Headers - start ---");
// Java 9 이후 환경에서 사용할 수 있는 asIterator() 메서드를 활용한 헤더 정보 출력 코드
request.getHeaderNames().asIterator()
.forEachRemaining(headerName -> System.out.println(headerName + ": " + request.getHeader(headerName)));
System.out.println("--- Headers - end ---");
System.out.println();
}
헤더 스타트랑 헤더 엔드 사이를 보면 코드가 확실히 직관적입니다
중간에 뭘 많이 안 집어넣어서 별 차이 없어보이고 개취일수도있다만
일단 전 그렇네요...
출력은 진짜 토시 하나 안 틀리고 똑같이 이렇게 출력되는 모습입니다
--- Headers - start ---
host: localhost:8080
connection: keep-alive
cache-control: max-age=0
sec-ch-ua: "Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
upgrade-insecure-requests: 1
user-agent:
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/
webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
sec-fetch-site: none
sec-fetch-mode: navigate
sec-fetch-user: ?1
sec-fetch-dest: document
accept-encoding: gzip, deflate, br
accept-language: ko,en-US;q=0.9,en;q=0.8,ko-KR;q=0.7
--- Headers - end ---
(헤더 정보 중에 user-agent 부분은 사용자 식별정보라서 지워놨어요)
결론
- Enumeration 을 사용하건 asIterator 을 사용하건 두 가지 코드의 출력 형식은 완전 똑같은데, Java 8 이후 버전을 사용하시는 분들이라면 asIterator 를 적극 사용하셔도 괜찮다 생각합니다
- 저도 얼른 버전 올리겠습니다... 라고 1달 전에도 얘기한 것 같은데 아직도 안 올림
끝! 읽어주셔서 감사합니다
🍀
좋아하는 것을 계속 좋아하세요!
반드시 행복해집니다
백엔드 개발자가 되고 싶어서 열심히 헤딩 중인 재영입니다 :-)
[Github] https://github.com/chujaeyeong
[E-mail] chujy1224@gmail.com
'Study > Java' 카테고리의 다른 글
| [Java] Mac에서 Java 버전 변경 방법 & 버전 디폴트 설정 방법 (환경변수 설정) (2) | 2023.09.26 |
|---|