2020-09-04 TIL ing

1 minute read

Iterator(반복자) 패턴

  • 객체 목록을 관리하는 컬렉션에서 목록 조회 기능을 별도의 객체로 캡슐화하는(별도의 클래스로 정의해서 메서드를 정의하는 것) 것.
  • 컬렉션의 관리 방식(data structure)에 상관없이 일관된 목록 조회 방법을 제공할 수 있다.
  • 컬렉션을 변경하지 않고도 다양한 방식의 목록 조회 기법을 추가할 수 있다.

Iterate

  • 목록을 따라가면서 값을 조회하는 것
    • 순차적으로 조회하는 것
  • 컬렉션의 타입에 따라 호출하는 방법이 다르더라도 값을 꺼내는 방법(메서드 시그너처)을 통일
    • 호출 규칙을 정의하는 것
      • interface 문법

중첩 클래스(nested class)

  • 특정 클래스의 작업을 도와주는 작은 크기의 클래스를 정의할 때 주로 중첩 클래스로 정의한다.
  • 클래스가 사용되는 곳에 위치하기 때문에 코드를 읽기 쉽고 관리하기가 쉽다.
  • 다른 클래스 안에 위치하기 때문에 캡슐화가 더 좋아진다. 캡슐화가 더 좋아진다는 것은, 복잡한 코드는 감추고 외부로부터의 접근은 줄이고 단순화시켜서 코드를 더 관리하게 쉽게 만든다는 의미다. 또한 바깥 클래스의 멤버에 대한 접근은 더 쉬워진다.

스태틱 중첩 클래스(static nested class)

  • 스태틱 멤버이기 때문에 인스턴스 멤버(필드나 메서드)에는 접근할 수 없다.
  • 비록 다른 클래스 안에 있지만 일반 패키지 클래스(top-level class)처럼 사용할 수 있다.
  • 다른 스태틱 멤버가 사용할 수 있다.
  • 스태틱 메서드로 생각하면 편하다.

내부 클래스(non-static nested class, inner class)

  • 인스턴스 멤버(필드나 메서드)처럼 사용한다.
  • 그래서 바깥 클래스의 인스턴스 멤버를 직접 접근할 수 있다.
  • 왜? 인스턴스 멤버이기 때문에 바깥 클래스의 인스턴스를 참조하는 this 내장 변수를 갖고 있다.
  • 따라서 inner class 를 사용하려면 바깥 클래스의 인스턴스를 먼저 생성해야 한다.
  • 내부 클래스(inner class)의 또 다른 종류가 있는데,
    • 메서드 안에 정의하는 로컬 클래스(local class) 와 이름 없이 정의하는 익명 클래스(anonymous class) 가 있다.

Categories:

Updated: