[TIL] Java Stream, 정규식, 리스트 차이 등 (2025-02-12)

김대진·2025년 2월 12일

[TIL]

목록 보기
5/8
post-thumbnail

✅ 오늘의 핵심 정리

오늘은 Java의 스트림(Stream)과 컬렉션(List) 처리 방식, 정규식 활용, 그리고 리스트(ArrayList vs LinkedList)의 차이에 대해 깊이 학습했다.
이론만이 아니라 직접 문제를 풀면서 IntStream, matches(), StringBuilder.append() 같은 실용적인 방법을 비교하며 체감했다.


📌 1. IntStream vs Stream<Integer>

  • 💡 문제: int[] 또는 List<Integer>에서 합계를 구할 때 어떤 방식이 더 효율적인가?
  • 💡 비교: IntStream을 사용하면 sum() 같은 연산을 바로 사용할 수 있고, Stream<Integer>mapToInt()로 변환이 필요하다.
  • 💡 경험: List<Integer>에서 sum()을 구할 때 mapToInt()를 추가해야 해서 IntStream이 더 직관적이었다.
int sum1 = Arrays.stream(arr).sum(); // IntStream 사용 (바로 연산 가능)
int sum2 = list.stream().mapToInt(Integer::intValue).sum(); // Stream<Integer> 변환 필요

🔹 결론: int[]를 다룰 때는 IntStream을 선호하는 것이 좋다.


📌 2. IntStream.iterate() vs IntStream.range()

  • 💡 문제: for 문 없이 규칙적인 숫자 스트림을 생성하는 가장 효과적인 방법은?
  • 💡 비교: range()는 특정 범위만 반복할 때, iterate()는 규칙적인 숫자 증가가 필요할 때 사용.
  • 💡 경험: k의 배수를 만들 때 IntStream.iterate(k, i -> i + k) 방식이 깔끔했다.
IntStream.iterate(k, i -> i + k).limit(n / k).toArray(); // k의 배수 생성

🔹 결론: range()는 범위 반복에, iterate()는 특정 규칙 적용에 유용하다.


📌 3. String.valueOf() vs StringBuilder.append()

  • 💡 문제: 숫자를 문자열로 변환할 때 String.valueOf()StringBuilder.append() 중 어느 것이 나을까?
  • 💡 비교: String.valueOf()는 변환이 간편하지만, 여러 번 문자열을 변경해야 할 경우 StringBuilder.append()가 더 빠르다.

🔹 결론: 문자열을 한 번만 변환할 때는 String.valueOf(), 반복 변환이 필요할 때는 StringBuilder를 사용하자.


📌 4. 정규식 matches("[05]+")의 의미

.filter(i -> String.valueOf(i).matches("[05]+"))
  • 💡 문제: 특정 숫자가 0과 5로만 이루어졌는지 어떻게 확인할까?
  • 💡 비교: equals()는 특정 값만 비교 가능하지만, matches("[05]+")를 사용하면 모든 0과 5 조합을 체크할 수 있다.

📌 5. list.add(0, list.remove(list.size() - 1)) 동작 방식

  • 💡 문제: 배열을 오른쪽으로 한 칸 회전시킬 때 어떻게 해야 할까?
  • 💡 비교: LinkedList를 사용하면 removeLast()addFirst()가 가능하지만, ArrayList에서는 add(0, remove(size-1)) 방식이 필요했다.
  • 💡 경험: list.remove()가 값을 반환하는 것을 활용하면 깔끔하게 회전 구현 가능.
list.add(0, list.remove(list.size() - 1)); // 마지막 원소를 맨 앞으로 이동

🔹 결론: 리스트에서 원소를 이동할 때 remove()는 반환 값을 활용하면 코드가 간결해진다.


이론만이 아니라, 실제 문제 해결 과정에서 무엇이 더 효율적인지 비교하면서 학습하니 확실히 이해가 더 잘 됐다!

0개의 댓글