자료구조 #13 - 컬렉션 프레임워크 : List & Iterator

HongInSung·2022년 12월 5일
0
post-thumbnail

이 포스트는 FastCampus에 이 강의를 보고 포스팅되었습니다.
문제가 될 시 삭제될 예정입니다.

뭐할거야?

컬렉션 프레임워크 중 List를 구현한 클래스를 알아보기 위해 멤버십을 관리하는 프로그램을 만들어볼 겁니다.

요구사항

  • 이번에 다뤄볼 클래스는 ArrayList입니다.
  • Member 클래스를 만들고, 멤버변수로 아이디와 이름을 선언한다.
  • Member 클래스로 생성된 인스턴스를 관리하는 클래스를 만들자.
    • 단, 컬렉션 프레임워크 클래스를 활용해서 구현하자.

코드 올라오는 곳?

여기에서 확인하실 수 있습니다.

Member 클래스 만들기

public class Member {
    private int memberId; // 멤버 id
    private String memberName; // 멤버 이름

    // Getter와 Setter
    public int getMemberId() {
        return memberId;
    }

    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }

    public String getMemberName() {
        return memberName;
    }

    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }

    // ToString 재조정
    @Override
    public String toString() {
        return "Member{" +
                "memberId=" + memberId +
                ", memberName='" + memberName + '\'' +
                '}';
    }
}

Member를 저장하는 MemberArrayList 클래스 만들기

import java.util.ArrayList; // ArrayList 클래스 import(중요)

public class MemberArrayList {
    private ArrayList<Member> members;

	// 생성자
    public MemberArrayList() {
        members = new ArrayList<>();
    }

	// 생성자(사이즈 있는 버전)
    public MemberArrayList(int size) {
        members = new ArrayList<>(size);
    }
	
    // 멤버 추가
    public void addMember(Member member) {
        members.add(member);
    }
	
    // 멤버 제거
    public boolean removeMember(int memberId) {
        for (int i = 0; i < members.size(); i++) {
            Member member = members.get(i); // i번째에 해당하는 멤버를 불러오고
            int tempId = member.getMemberId(); // 해당 멤버에 id를 불러온다.
            if(tempId == memberId) {
                members.remove(i); // 지우고자 하는 id와 멤버 id가 같을때 삭제한다.
                return true;
            }
        }
        System.out.println("해당 멤버id를 가지고 있는 유저가 없습니다.");
        return false;
    }

	// 멤버 조회
    public void showAllMember() {
        for (Member member : members) {
            System.out.println(member);
        }
    }
}

테스트 코드 작성

public class MemberTest {
    public static void main(String[] args) {
        // 멤버 2명 생성
        Member member1 = new Member();
        Member member2 = new Member();
		
        // 멤버 id, name 설정
        member1.setMemberId(1);
        member1.setMemberName("홍길동");

        member2.setMemberId(2);
        member2.setMemberName("홍상두");

		// ArrayList 생성, 멤버 추가
        MemberArrayList list = new MemberArrayList();
        list.addMember(member1);
        list.addMember(member2);
		
        // 멤버 조회
        list.showAllMember();

		// 멤버 삭제
        list.removeMember(2);
		
        // 다시 멤버 조회
        System.out.println("");
        list.showAllMember();
    }
}

이렇게 작성을 끝냈습니다.
이렇게 끝내긴 좀 아쉬우니까, 삭제 부분을 리팩토링해보겠습니다.

어떻게 리팩토링 할껀디?

Iterator라는 놈을 쓸겁니다.
Iterator는 컬렉션 프레임워크에 저장된 요소들을 하나씩 참조하는 놈입니다.
순서가 있는 List같은 경우에는 get()이라는 메서드를 사용하면 되겠지만,
순서가 없는 Set같은 경우 get메서드가 없기에 요놈을 써서 순회해야 합니다.

어떻게 쓰는건데 이거

hasNext() : 다음 요소가 있는지 확인하는 메서드입니다. ( 반환값은 True | False )
Next() : 다음 요소를 반환합니다.

삭제 리팩토링

public boolean removeMember(int memberId) {
    // Iterator 선언
    Iterator<Member> ir = members.iterator();
    
    // ir.hasNext()가 false가 될 때까지 돈다.
    while(ir.hasNext()) {
        Member member = ir.next(); // 다음 요소를 member에 저장시키고

        if (member.getMemberId() == memberId) { // memberId가 맞는지 확인
            members.remove(member); // 삭제하고
            return true // true 반환
        }
    }
    System.out.println("해당 멤버id를 가지고 있는 유저가 없습니다.");
    return false;
}

성공적으로 리팩토링이 종료되었습니다.

마치며

이것으로 List - ArrayList와 Iterator를 이용한 멤버십 만들기는 여기까지 하겠습니다.
다음시간에는 Set 인터페이스를 이용해 멤버십을 다시 리팩토링 해보겠습니다.
수고하셨습니다.

profile
안녕하세요! 풀스택 노려보고 있는 홍인성입니다!

0개의 댓글