<aside> 💁♂️ 배열과 List 같은 컬렉션을 따라다니는 악마를 소개하고, 이러한 악마를 퇴치하는 방법을 알아봅시다.
</aside>
boolean hasPrisonKey = false;
for (Item each : items) {
if(each.name.equals("감옥 열쇠")) {
hasPrisonKey = true;
break;
}
}
위와 같은 코드는 for loop
안에서 if
조건이 중첩되어 있어 가독성이 좋지 않습니다.
따라서 다음과 같이 개선할 수 있습니다.
boolean hasPrisonKey = items.stream().anyMatch(
item -> item.name.equals("감옥 열쇠")
);
anyMatch
메서드는 자바 표준 라이브러리에 있는 컬렉션 전용 메서드입니다.
이처럼 anyMatch
메서드를 알고 있으면, 복잡한 로직을 직접 구현하지 않아도 됩니다.
컬렉션 처리도 응집도가 낮아지기 쉽습니다.
class FieldManager {
//멤버 추가
void addMember(List<Member> members, Member newMember) {
if (members.stream().anyMatch(member -> member.id == newMebmer.id)) {
throw new RuntimeException("이미 존재하는 멤버입니다.");
}
if (members.size() == MAX_MEMBER_COUNT) {
throw new RuntimeException("이 이상 멤버를 추가할 수 없습니다.");
}
members.add(newMember);
}
boolean partyIsAlive(List<Member> members) {
return members.stream().anyMatch(member -> member.isAlive());
}
}
FieldManager
는 게임에서 필드 맵을 관리하는 클래스입니다.
파티에 멤버를 추가하는 addMember
메서드와 파티에 살아 있는 멤버가 있는지 리턴하는 partyIsAlive
가 정의되어 있습니다.
하지만 필드 맵 말고도 게임에서 멤버를 추가하는 시점이 있을 수 있습니다.
class SpecialEventManager {
void addMember(List<Member> members, Member member) {
members.add(member);
}
}