Java 컬렉션의 패키지 구조 (java.util)-왜 Iterable이 java.lang에 위치합니까?


12

interface를 제외하고 아래 다이어그램에 Iterable따라 나머지 모든 구성 (인터페이스 / 클래스 / 추상 클래스)은 동일한 패키지에 있습니다.java.util

여기에 이미지 설명을 입력하십시오

 

왜 포장에 Iterable앉아 java.lang있습니까?

참고 : Java 프로그래밍의 패키징 측면을 이해하려고합니다.


java8 태그가 붙어 있는지 궁금 합니다. 여기서 요청한 모든 API는 훨씬 오래되었습니다. Iterable은 Java 버전 1.5, 1.2에서 컬렉션 프레임 워크로 도입되었습니다.
gnat

답변:


22

javadoc 에서 설명했듯이 , 목적은 특정 언어 구문Iterable지원 하는 것입니다 .

이 인터페이스를 구현하면 객체가 "foreach"문의 대상이 될 수 있습니다

이와 같이,이 속하는 LANG 패키지 어느

Java 프로그래밍 언어 디자인에 필수적인 클래스를 제공합니다.


도면에서 다른 클래스 에 속하는 JCF 에, 그리고 따라서 util로 패키지

컬렉션 프레임 워크를 포함합니다 ...


+1. 그래도 그 이후로 Iterator이상적으로 있어야 한다고 생각 합니다 . 물론, 이전 버전과의 호환성 을 위해 있어야 합니다 ( "foreach"구문이 언어에 중요한 역할을하기 훨씬 전에 JDK에 도입되었습니다). java.langIterablejava.util
ruakh

@ruakh Iterator는 편리하지만 "기본"패키지로 가기에는 너무 구체적인 (메소드 선택 및 이름 지정) 것으로 간주되었습니다. 원래의 생각만큼 편리하지 않은 이전 모델 인 Enumeration을 생각해보십시오. lang 패키지에 가지 않았다는 것이 현명했습니다
gnat

나의 요점은 그것이 편리하다는 것이 아니라, 이제 적절한 언어가 그것에 의존한다는 것이다. ( Iterableon 의 의존성을 제외 Iterator 하고 java.lang패키지는 일반적으로의 클래스에 의존하지 않습니다 java.util.)
ruakh

@ruakh 알겠습니다. 정말 좋은 지적입니다. 감사합니다. API 디자이너가 반복을 수행하는 객체를 노출하기 위해 Iterable을 원하는 이유를 이해할 수 있지만,이를 수행하도록 선택한 방식은 우아하지 않습니다.
gnat

6

많은 것들이 Iterable 인터페이스를 구현 하거나 서브 인터페이스로 확장하기 때문입니다.

구현 클래스는 다음과 같습니다.

  • java.util
    • AbstractCollection
    • 초록 목록
    • AbstractQueue
    • AbstractSequentialList
    • AbstractSet
    • ...
    • 병발 사정
      • ArrayBlockingQueue
      • 동시 링크
      • ...
  • java.beancontext
    • BeanContextServicesSupport
    • BeanContextSupport
    • ...
  • java.sql
    • BatchUpdateException
    • 데이터 잘림
    • ...
  • javax.management
    • 속성 목록
  • javax.print.attribute.standard
    • JobState 이유
    • ...
  • ...

이것은 거대한 목록입니다. 그리고 모든 종류의 패키지를 다룹니다.

또한 순환 패키지 종속성 을 최소화하려고합니다 . 패키지 A의 클래스가 패키지 A의 클래스에 종속 된 패키지 B의 클래스에 종속되는 경우 순환 종속성이 있습니다. 그것들이 존재한다는 것이 항상 나쁘지는 않지만 다른 순환 종속성으로 이어지고 이는 나쁜 일이 될 수 있습니다. 자체적으로 나쁘지는 않지만 두 클래스 또는 패키지 사이의 커플 링이 너무 타이트하다는 것을 나타내는 디자인 냄새입니다. 기술 부채 누적의 시작입니다.

이에 대한 해결책은 "그렇습니다. Iterable 인터페이스는 Java 및 javax 구조 전체에서 다양한 클래스 및 패키지에 의존하는 것입니다. 언어 라이브러리의 가장 기본이되어야합니다-java .lang. "

그리고 그것이 당신이 그것을 찾을 수있는 곳입니다.

관련 독서 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.