(TIL) 20220523, Iterable와 Iterator

2022. 5. 24. 02:29TIL(Today I learned)

반응형

🏴󠁩󠁤󠁪󠁷󠁿Facts(한 것)


  • 자바 9 공부
  • 알고리즘 문제풀기
  • 소프트웨어 아키텍처 공부

🏴󠁩󠁤󠁪󠁷󠁿Findings(배운 것)


며칠전 반복자 패턴을 공부하면서 Iterable과 Iterator에 대한 언급이 있었다.

 

 

그래서 Java에서 말하는 Iterable과 Iterator에 대해서 알아보려 한다.

 

 

먼저 Iterable과 Iterator에 대해서 알려면, Collection에 대한 이해가 필요하다.

 

 

자바에서 Collection 인터페이스는 다음과 같이 구현되어 있다.

 

public interface Collection<E> extends Iterable<E> {
	// ....
    
    Iterator<E> iterator();
    
    //...
}

 

보다시피 Iterable을 상속받고 있다.

 

그리고 인터페이스에 메서드로 Iterator 클래스의 메서드를 가지고 있다.

 

 

객체지향에서 상속의 의미를 알고 있다면 단번에 이해가 될 것이다.

 

Collection은 Iterable을 상속받기 때문에 모든 Collection 클래스는 Iterable이다.

 

 

그리고 Iterable에는 다음과 같이 Iterator를 리턴하는 메서드 iterator()가 있다.

 

 

그렇기 때문에 Iterable 객체를 구현하는 것은 곧 Iterator() 메소드를 구현하는 것이고, 

 

 

이는 Iterator 객체를 리턴하기 때문에 이 세가지 인터페이스는 모두 연관이 있는 것이다.

 

그리고 Iterable 객체는 모두 for - each 접근이 가능하다.(Array는 Iterable 객체가 아니므로 불가)

 

 

추가적으로 Collection 인터페이스에는 자바 8버전 이후에 추가된 Stream과 parallelStream이 있다.

 

이 두 메서드는 default 메서드로 정의되어 있고, 이전 포스팅에서 default 메서드는 구현부가 있다고 설명했다.

 

그렇기에 인터페이스에 구현이 있는 신기한 장면을 볼 수 있다.(사실 익숙해진다.)

 

 

🏴󠁩󠁤󠁪󠁷󠁿Affirmation(자기선언)


  • 매일 알고리즘 문제 1문제 이상 풀기 -> 성공
  • 자바 8버전에 익숙해지기 -> 성공

🏴󠁩󠁤󠁪󠁷󠁿여담


Iterator 인터페이스는 Josh Bloch가 썼다.

 

반응형