2020-09-04 TIL ing
1 minute read
Iterator(반복자) 패턴
- 객체 목록을 관리하는 컬렉션에서 목록 조회 기능을 별도의 객체로 캡슐화하는(별도의 클래스로 정의해서 메서드를 정의하는 것) 것.
- 컬렉션의 관리 방식(data structure)에 상관없이 일관된 목록 조회 방법을 제공할 수 있다.
- 컬렉션을 변경하지 않고도 다양한 방식의 목록 조회 기법을 추가할 수 있다.
Iterate
- 목록을 따라가면서 값을 조회하는 것
- 컬렉션의 타입에 따라 호출하는 방법이 다르더라도 값을 꺼내는 방법(메서드 시그너처)을 통일
중첩 클래스(nested class)
- 특정 클래스의 작업을 도와주는 작은 크기의 클래스를 정의할 때 주로 중첩 클래스로 정의한다.
- 클래스가 사용되는 곳에 위치하기 때문에 코드를 읽기 쉽고 관리하기가 쉽다.
- 다른 클래스 안에 위치하기 때문에 캡슐화가 더 좋아진다.
캡슐화가 더 좋아진다는 것은,
복잡한 코드는 감추고 외부로부터의 접근은 줄이고 단순화시켜서
코드를 더 관리하게 쉽게 만든다는 의미다.
또한 바깥 클래스의 멤버에 대한 접근은 더 쉬워진다.
스태틱 중첩 클래스(static nested class)
- 스태틱 멤버이기 때문에 인스턴스 멤버(필드나 메서드)에는 접근할 수 없다.
- 비록 다른 클래스 안에 있지만 일반 패키지 클래스(top-level class)처럼 사용할 수 있다.
- 다른 스태틱 멤버가 사용할 수 있다.
- 스태틱 메서드로 생각하면 편하다.
내부 클래스(non-static nested class, inner class)
- 인스턴스 멤버(필드나 메서드)처럼 사용한다.
- 그래서 바깥 클래스의 인스턴스 멤버를 직접 접근할 수 있다.
- 왜?
인스턴스 멤버이기 때문에 바깥 클래스의 인스턴스를 참조하는
this 내장 변수를 갖고 있다.
- 따라서 inner class 를 사용하려면 바깥 클래스의 인스턴스를 먼저 생성해야 한다.
- 내부 클래스(inner class)의 또 다른 종류가 있는데,
- 메서드 안에 정의하는
로컬 클래스(local class) 와
이름 없이 정의하는 익명 클래스(anonymous class) 가 있다.