JAVA

왜 Iterator가 clutter라는 걸까?

깊은바다거북 2022. 8. 24. 20:54

자바 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에 올라온 질문 제목.

De-Clutter Your Code

→ 어떻게 하면 코드를 Clean up 할 수 있는지에 대한 짧은 견해를 담은 글이다.

용례들을 취합해 보면, 주로 “code clutter”와 같이 결합되어

  • 난잡하게 작성된 코드
  • 좋지 못한 코드 뭉치덩이
  • 가독성이 떨어지는 코드

같은 뜻으로 쓰이는 단어인 듯 하다.

clutter: (명사) 어지럽게 흩어져 있는 것. 잡동사니, 어수선함.

본래의 영어 단어 뜻 그대로, clean code의 반대 개념 정도로 이해하면 되겠다.

그래서 iterator가 clutter라는 건?

For-Each Loop 도큐먼트 페이지로 다시 돌아가 보면,

  1. iterator는 clutter이다. (”The iterator is just clutter”)
  2. for-each 구조는 clutter를 제거한다. (”The for-each construct gets rid of the clutter…”)
  3. 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