Explain
컬렉션 인터페이스 (Collection Interface)
: 하나의 객체를 관리하기 위한 메서드가 정의된 인터페이스
: 하위에 List와 Set 인터페이스를 가짐
1. 리스트 인터페이스 (List Interface)
- 순서가 있는 자료관리, 중복을 허용
- 객체를 순서에 따라 저장하고 관리하는데 필요한 메서드가 선언된 인터페이스
- 배열의 기능을 구현하기 위한 인터페이스
- 이 인터페이스를 구현한 클래스는 ArrayList / Vector / LinkedList / Stack / Queue 등이 있음
2. 세트 인터페이스 (Set Interface)
- 자료관리에 순서가 없음, 중복을 허용하지 않음
- 이 인터페이스를 구현한 클래스는 HashSet / TreeSet 이 있음
- 아이디, 주민번호 등 유일한 값이나 객체를 관리할 때 사용
- 저장된 순서와 출력순서는 다를 수 있음
- get(i) 메서드가 제공되지 않음
배열 리스트 (ArrayList)
- 객체 배열을 구현한 클래스
<MemberArrayList.java>
package chapter12_collection.arraylist;
import java.util.ArrayList;
import chapter12_collection.Member;
public class MemberArrayList {
private ArrayList<Member> arrayList; // ArrayList 생성만 한 상태
public MemberArrayList() // 생성자
{
arrayList = new ArrayList<Member>(); // 객체 생성
}
public void addMember(Member member)
{
arrayList.add(member); // add메서드로 arrayList에 member를 추가하는 코드
}
public boolean removeMember(int memberId) // 멤버를 하나씩 제거하는 기능 구현
{
for( int i = 0; i < arrayList.size(); i++)
{
Member member = arrayList.get(i);
int tempId = member.getMemberId();
if(memberId == tempId) // 임시로 저장한 아이디와 같으면
{
arrayList.remove(i); // remove()메서드로 제거
return true; // true 반환
}
}
System.out.println(memberId + "가 존재하지 않습니다.");
return false;
}
public void showAll() { // 다 보여주는 메서드
for (Member member : arrayList)
{
System.out.println(member);
}
System.out.println(); // 반복문마다 개행
System.out.println(arrayList);
}
}
이처럼 arrayList배열로부터 멤버의 값을 받아오고, 그 멤버를 검증하는 과정을 통해 구현할 수 있다.
반면, public boolean removeMember(int memberId) 코드에서 for문을
순회(Iterator)를 활용하는 방법으로 바꿀 수 있는데,
여기서 Iterator란 'Collection의 개체를 순회하는 인터페이스'를 말한다.
밑의 예제는 for문 대신 iterator() 메서드를 호출하고, 사용하는 예제이다.
package chapter12_collection.arraylist;
import java.util.ArrayList;
import java.util.Iterator;
import chapter12_collection.Member;
public class MemberArrayList {
private ArrayList<Member> arrayList; // ArrayList 생성만 한 상태
public MemberArrayList() // 생성자
{
arrayList = new ArrayList<Member>(); // 객체 생성
}
public void addMember(Member member)
{
arrayList.add(member); // add메서드로 arrayList에 member를 추가하는 예제
}
public boolean removeMember(int memberId) // 멤버를 하나씩 제거하는 기능 구현
{
Iterator<Member> iterator = arrayList.iterator();
while(iterator.hasNext()) // 다음번에 가져올 요소가 있냐를 물어보는 메서드 hasNext(), hasNext의 커서는 맨 첫번째 요소에 있기때문에 모든 멤버를 순회하기에 효과적
{
Member member = iterator.next(); // 다음 멤버의 요소를 가져와서 member에 저장 // 위 for문에서 arrayList.get(i)와 비슷한 역할
int tempId = member.getMemberId();
if(memberId == tempId) // 임시로 저장한 아이디와 같으면
{
arrayList.remove(member); // remove()메서드로 제거
return true; // true 반환
}
}
System.out.println(memberId + "가 존재하지 않습니다.");
return false;
}
public void showAll() { // 다 보여주는 메소드
for (Member member : arrayList)
{
System.out.println(member);
}
System.out.println(); // 반복문마다 개행
System.out.println(arrayList);
}
}
이 코드에서 Iterator<Member> iterator = arrayList.iterator();
<Member>처럼 제네릭으로 선언해주어 불러올떄 타입을 지정하지 않도록 할 수 있다.
다음으로는 MemberArrayList를 테스트할 클래스를 만들어준다.
<MemberArrayListTest.java>
package chapter12_collection.arraylist;
import chapter12_collection.Member;
// MemberArrayList가 테스트할 테스트코드
public class MemberArrayListTest {
public static void main(String[] args) {
MemberArrayList memberArrayList = new MemberArrayList();
Member memberSong = new Member(101, "송강호");
Member memberHwang = new Member(102, "황인욱");
Member memberJan = new Member(103, "잔나비");
memberArrayList.addMember(memberSong);
memberArrayList.addMember(memberHwang);
memberArrayList.addMember(memberJan);
memberArrayList.showAll();
memberArrayList.removeMember(memberSong.getMemberId());
}
}
Result
'Programming > Java_자바' 카테고리의 다른 글
[JAVA 기초] Comparable 와 Comparator 인터페이스 (0) | 2022.01.17 |
---|---|
[JAVA 기초] 스택(Stack), 큐(Queue), 해시세트(HashSet) 구현 및 실습 (0) | 2022.01.16 |
[JAVA 기초] 스택(Stack), 큐(Queue), 트리(Tree) (0) | 2022.01.14 |
[JAVA 기초] 제네릭 프로그래밍, 컬렉션 프레임워크 (0) | 2022.01.13 |
[JAVA 기초] 상속과 다형성의 간단한 예제 (동물) (0) | 2021.12.25 |