깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • BFS(너비우선탐색)
  • 최소 힙(Min Heap)
  • 트러블 슈팅 Troubleshooting
  • Leetcode
  • Backtracking(백트래킹)
  • Preorder Traversal(전위 순회)
  • TIT (Today I Troubleshot)
  • 팀 프로젝트
  • POST / GET 요청
  • 자바스크립트 기초 문법
  • 시간 복잡도
  • 혼자 공부하는 자바스크립트
  • 프로그래머스
  • Linked List
  • DFS(깊이우선탐색)
  • 점화식(Recurrence Relation)
  • 재귀 함수
  • Trie
  • tree
  • BST(이진 탐색 트리)
  • leetcode-cli
  • Binary Tree(이진 트리)
  • Til
  • 자잘한 에러 해결
  • 최대 힙(Max Heap)
  • 코딩테스트 연습문제
  • 자료 구조
  • TypeScript
  • 01. 미니 프로젝트
  • Inorder Traversal(중위 순회)
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

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

 

    'JAVA' 카테고리의 다른 글
    • 배열 ↔ 리스트 형변환 모음
    • [프로그래머스 Lv1] 신고 결과 받기
    • Class literal 이란 용어를 발굴하게 된 사정
    • 책 [GOOD JAVA] 정리
    깊은바다거북
    깊은바다거북

    티스토리툴바