이터레이터
조회에만 집중하는 인터페이스이터레이터 패턴
Collection 요소들을 Iterator로 순회가능한 이유는 Collection 요소가 Iterable을 상속받기 때문임ArrayList를 예로 들어봤음
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
public interface List<E> extends SequencedCollection<E>
public interface SequencedCollection<E> extends Collection<E>
public interface Collection<E> extends Iterable<E>
이터레이터 패턴 예시
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Iterator {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("sue");
names.add("hak");
Iterator<String> iterator = names.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
For-Each 예시
for(String name : names) {
System.out.println(name);
}
for(String name : names) {
if(name.equals("hak")) {
name.remove(); // 불가능 - remove 자체를 사용 불가
}
System.out.println(name);
}
Iterator<String> iterator = names.iterator();
while(iterator.hasNext()) {
String name = iterator.next();
if(name.equals("hak")) {
iterator.remove(); // 순회하는 동안 수정 가능
}else {
System.out.println(name);
}
}
즉시 실행 함수를 통해 private, public 같은 접근제어자를 만드는 패턴const pukuba = (()=>{
const a = 1
const b = () => 2
const public = {
c : 2,
d : () => 3
}
return public;
})()
console.log(pukuba) // { c: 2, d: ƒ d() }
console.log(pukuba.a) // undefined
💡 싱글톤과 노출 모듈 패턴의 차이
두 패턴 모두 객체의 인스턴스를 제한하고, 특정 접근 방식으로만 객체에 접근하게 하여 전역 상태를 통제함
두 방식은 목적과 구현 방식에서 차이가 있음
노출 모듈 패턴은 즉시 실행 함수로 내부 데이터를 캡슐화하는 방식에 집중하여 접근 범위를 제어함
싱글턴 패턴은 오직 하나의 인스턴스만 생성되도록 제한하는 것에 집중하여 인스턴스를 공유하는 방식으로 상태를 관리함