⚡반복문의 종류
1. for loop
- 가장 빠르고 단순하다. 그래서 효율적이다.
- 모든 자료형에 대해 사용이 가능하다.
- 중간에 loop 건너뛰기나 종료가 가능하다. (continue or break)
- 반복 범위 컨트롤이 가능하다. (i++, i–, i+=2*i 등)
- 변수를 활용할 수 있다. (var i 값을 사용할 수 있다)
2. forEach
- 빠른 편이다.
- Array객체에서 사용이 가능하다.
- 일반 for문보다 가독성이 좋고, 객체형을 다루기가 쉽다.
- for문과 다르게 중간에 끊을 방법이 없다. (return으로 - skip가능)
- return값을 받지 못한다.
3. filter
- 빠른 편이다.
- Array객체에서 사용이 가능하다.
- chainable 하다.
- 빈 배열 요소를 반환하지 않는다.
- 대용량 배열 처리 시 메모리 overflow 가능성이 있다.
- return값은 true/false이며, 요소를 반환한다.
4. map
- 빠른 편이다.
- Array객체에서 사용이 가능하다.
- chainable 하다.
- 대용량 배열 처리 시 메모리 overflow 가능성이 있다.
- return값 자체를 반환한다.
5. reduce
- 아래의 표를 보시면 알겠지만, reduce는 forloop와 별반 차이가 없다.
- 다른 반복문과 다르게 사용법이 좀 다르다.
public void repeatTest() {
ArrayList<Integer> testArray = new ArrayList<>(Arrays.asList(1,2,5,3,4));
// stream reduce()
testArray
.stream()
.reduce((a, b) -> {
System.out.println(a);
System.out.println(b);
return a;
});
// array내부에 있는 값중 최대값 구하기.
Integer testValue = testArray
.stream()
.reduce(1, (a, b) -> {
if (a < b) {
return b;
}
return a;
});
System.out.println(testValue);
}
}
❗❗반복문을 정리하게 된 이유
개발을 하다 보면 여러 가지 경우로 인해서 반복문을 무의식적으로 계속해서 사용하게 된다.
사용을 할 때는 별생각 없이 특정값을 뽑아내기 위해서 for, forEach 등 여러 반복 문중 하나를 골라서 사용하고 결과를 얻어서 개발을 진행하곤 한다. 최근에 회사에서 개발을 진행하던 중, 피드백을 받는 부분에서 forEach와 map을 사용할 때의 장단점을 아는지에 대해서 팀장님께서 물어보신 적이 있다. 순간 속도적인 차이가 있을 거라고 생각을 했고, 다른 장단점에 대해서는 잘 생각이 나지 않았다. 내가 사용을 할 줄 알지만 잘 모르고 사용을 하고 있구나라는 생각이 들었고 여러 반복문에 대해서 정리를 하게 되었다.
예시
forEach와 map의 장단점에 대해서 한번 생각해보길 바란다.
@Test
public void feedbackTest() {
List<System> systemList = queryFactory
.selectFrom(QSystem.System)
.fetch();
// forEach
List<SystemInfo> systemInfoList = new ArrayList<>(systemList.size());
systemInfoList.forEach(item -> {
SystemInfo newInfo = new SystemInfo(item);
newInfo.setSystemDivisionName(systemDivisionCodeMap.get(newInfo.getSystemDivisionCode()).getCdcNm());
systemInfoList.add(newInfo);
});
// map
List<SystemInfo> systemInfoList = systemList
.stream()
.map(item -> {
SystemInfo newInfo = new SystemInfo(item);
newInfo.setSystemDivisionName(systemDivisionCodeMap.get(newInfo.getSystemDivisionCode()).getCdcNm());
return newInfo;
})
.collect(Collectors.toList())
}
반응형
'Java' 카테고리의 다른 글
[JPA] QueryDsl에서 Date Type 사용 방법 정리 (0) | 2023.02.05 |
---|---|
[JAVA] Tomcat error page 호출 관련 내용 정리 (0) | 2022.12.19 |
💀 디자인 패턴 및 리팩터링 개선 작업 내용 정리 (0) | 2022.11.27 |
Java 19 주요 내용 정리 (0) | 2022.09.20 |
[정리] 데이터 베이스(DataBase) 에 대한 내용 정리 (0) | 2022.07.12 |