자바 documents의 The For-Each loop 페이지를 읽다가 궁금해졌다.
이 페이지에 보면, “the iterator is just clutter”라는 표현이 있다. Iterator가 clutter이니까, for-each 루프를 쓰면 (iterator를 숨기기 때문에) clutter를 방지할 수 있다고. 그래서 clutter가 정확히 뭐라는 걸까 궁금해서 구글링해보았다.
프로그래밍에서 Clutter의 뜻
어디서도 명확한 정의는 찾을 수 없었지만, 이런 용례들을 볼 수 있었다:
(아티클의 제목 자체가 용례이다.)
“****Comments in Code: How To Avoid Clutter and Make Your Code More Readable”**
→ 어떻게 코멘트(주석)을 작성해야 바람직할지에 대해 설명하는 글이다. 처음부터 끝까지 clutter라는 용어를 따로 설명하지 않는다.
"****Experienced Developers Use These 7 Java Optional Tips to Remove Code Clutter”**
→ Optional 이라는 클래스가 잘못 쓰이는 7가지 방법과 해결책에 대해 설명하는 글이다. 역시나 본문의 처음부터 끝까지 clutter라는 단어는 등장하지 않는다.
“How to reduce clutter?” → stackoverflow에 올라온 질문 제목.
→ 어떻게 하면 코드를 Clean up 할 수 있는지에 대한 짧은 견해를 담은 글이다.
용례들을 취합해 보면, 주로 “code clutter”와 같이 결합되어
- 난잡하게 작성된 코드
- 좋지 못한 코드 뭉치덩이
- 가독성이 떨어지는 코드
같은 뜻으로 쓰이는 단어인 듯 하다.
clutter: (명사) 어지럽게 흩어져 있는 것. 잡동사니, 어수선함.
본래의 영어 단어 뜻 그대로, clean code의 반대 개념 정도로 이해하면 되겠다.
그래서 iterator가 clutter라는 건?
For-Each Loop 도큐먼트 페이지로 다시 돌아가 보면,
- iterator는 clutter이다. (”The iterator is just clutter”)
- for-each 구조는 clutter를 제거한다. (”The for-each construct gets rid of the clutter…”)
- for-each 구조는 제네릭과 잘 맞아 떨어져, 타입 안정성을 보존하면서 남은 clutter를 제거한다. (”the for-each contstruct combines beautifully with generics. It preserves all of the type safety while removing the remaining clutter.")
이렇게 세 번의 언급이 있다.
for-each 루프 구조가 iterator를 숨기는 방식이라는 건 알겠다. 하지만 왜 iterator는 무조건 clutter라는 걸까?
도큐먼트에서 이해를 돕기 위해 첨가한 예시 코드는 다음과 같다:
// 그냥 for 루프로 루프 돌기
void cancelAll(Collection<TimerTask> c) {
for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
i.next().cancel();
}
// for-each 구조로 루프 돌기
void cancelAll(Collection<TimerTask> c) {
for (TimerTask t : c)
t.cancel();
} //=> iterator가 숨겨짐.
지금 최대한 이해해 볼 수 있는 바로는,
가설1: iterator를 만들 때 그게 for 루프 안에서 전부 다 쓰이게 될지는 모르는 거니까, 잉여가 발생할 수도 있다고 해서 iterator를 clutter라고 한 거다.
가설2: 그냥 for 루프 전반에 쓰인 iterator 뭐시기 코드들이 지저분해서 clutter다(for-each로 더 깔금하게 쓸 수 있으니).
결론은 없다. 가설 1이 맞을까, 2가 맞을까? 제 3의 답이 있을까?
공부해나가다 보면 알게 될 날이 오겠지.
https://brainy-shop-8e4.notion.site/Iterator-clutter-211c854b252a40398e6bcdf97836fd64
왜 Iterator가 clutter라는 걸까?
자바 documents의 The For-Each loop 페이지를 읽다가 궁금해졌다.
brainy-shop-8e4.notion.site