[그린컴퓨터] Server/JAVA(자바 JDK)

컬렉션 프레임워크 { 정의, Collection 인터페이스, Map 인터페이스, 실습준비 }

Ben의 프로그램 2023. 6. 9. 13:36
728x90

컬렉션 프레임워크란?

  • 흔히 프로그램 개발을 건물 짓는 일에 비유합니다. 
  • 원하는 건물을 지으려면 구조를 잘 잡아야 하듯이 프로그램을 개발할 때도 사용하는 자료를 어떤 구조로 관리할 것인지가 중요합니다.  
  • 그래야 프로그램의 기능을 효과적으로 구현할 수 있기 때문입니다. 
  • 이 때 사용하는 것이 자료 구조(data structure)니다. 
  • 자료 구조는 프로그램 실행 중 메모리에 자료를 유지 및 관리하기 위해 사용합니다. 
  • 자바에서는 필요한 자료 구조를 미리 구현하여 java.util 패키지에서 제공하고 있는데, 이를 컬렉션 프레임워크 collection framework 라고 합니다. 

  • 자료 구조는 개발자가 필요할 때 직접 만들어 사용할 수도 있습니다. 
  • 하지만 자바 컬렉션 프레임워크를 사용하면 직접 개발하는 수고를 덜 수 있을 뿐만 아니라 잘 만들어진 자료 구조 클래스를 활용할 수 있습니다. 
  • 여기에서는 자료 구조 자체에 대해 자세히 다루지는 않습니다.
  • 앞으로 이야기할 내용은 자바에서 제공하는 자료 구조 라이브러리입니다. 
  • 자바가 라이브러리를 어떻게 제공하는지, 또 그 라이브러리를 어떻게 사용할 수 있는지 살펴볼 것입니다. 
  • 자바 컬렉션 프레임워크에는 여러 인터페이스가 정의되어 있고, 그 인터페이스를 구현한 클래스가 있습니다.
  • 각 인터페이스의 특성과 클래스 활용법을 알면 개발 목적에 맞게 잘 활용할 수 있습니다. 

  • 컬렉션 프레임워크의 전체 구조는 Collection 인터페이스와 Map 인터페이스 기반으로 이루어져 있습니다. 
  • Collection 인터페이스는 하나의 자료를 모아서 관리하는 데 필요한 기능을 제공합니다.
  • Map 인터페이스는 쌍 pair 으로 된 자료들을 관리하는 데 유용한 기능을 제공합니다. 
  • 각 인터페이스를 구현한 클래스는 그림에서 소개한 것보다 많습니다. 
  • 이 책에서는 프로그램 개발에 많이 사용되고 알아 두어야 하는 클래스 위주로 설명합니다. 

Collection 인터페이스 

  • Collection 인터페이스 하위에는 List 인터페이스Set 인터페이스가 있습니다. 
  • List 인터페이스를 구현한 클래스순차적인 자료를 관리하는 데 집중한 클래스입니다. 
  • List 인터페이스를 구현한 클래스는 중복을 허용하며 대기장 명단과 같은 데이터를 다룰 때 사용합니다. 
  • Set 인터페이스를 구현한 클래스수학 시간에 배운 집합 자료를 관리하는 데 집중한 클래스입니다. 
  • Set 인터페이스를 구현한 클래스는 중복을 허용하지 않으며 회원 아이디 같은 데이터를 다룰 때 사용합니다. 
  • Collection 인터페이스에서 자주 사용하는 메소드는 다음과 같습니다. 

  • 여기서 헷갈려할 만한 요소는 add나 remove 메서드에서 boolean 결과 값을 반환하는 이유는 객체가 잘 추가 & 제거 되었는지 여부를 반환하는 것입니다. 
  • Collection 인터페이스를 구현한 클래스는 위 메서드를 모두 제공합니다. 
  • 여기서 재밌는 점은 Collection 인터페이스 하위 인터페이스 List와 Set 인터페이스에서 사용하는 메서드에 차이가 있다는 점입니다. 

  • Collection 인터페이스의 하위 인터페이스인 Set 인터페이스에서 다루는 데이터는 순서가 없는 집합 데이터들입니다.
  • Set 인터페이스에서 다루는 자료는 순서가 없기 때문에 get( ) 메서드를 사용할 수 없습니다. 
  • 이때, Set 인터페이스를 구현한 클래스에서는 iterator( ) 메서드를 호출하여 Iterator 를 얻는다
  • 그러면 Iterator 클래스를 사용하여 Set 인터페이스를 통해 구현한 요소들을 순회할 수 있다

    Iterator ir = hashSet.iterator( );
  • Iterator 를 사용하여 모든 요소를 순회할 때 다음 두 가지 메소드를 사용한다. 

    boolean hasNext( ) : 다음 요소가 있는지 확인한다.
    E next( ) : 다음 요소를 반환한다. 

Map 인터페이스

  • Map 인터페이스는 하나가 아닌 쌍 Pair 으로 되어 있는 자료를 관리하는 메서드들이 선언되어 있습니다. 
  • key-value 쌍이라고 표현하는데 이때 키 값은 중복될 수 없습니다. 
  • 다시 말해서 아래와 같은 경우에 '이름' 이라는 key 는 유일하게 딱 하나 있는 것입니다. 
  • '이름' 이라는 key 에 해당하는 value 값은 여러 개일 수도 있고 중복될 수도 있습니다. 
  • '수영' 이라는 이름을 가진 사람과 '수영' 이라는 취미를 가진 사람이 있을 수 있잖아요? 그런 개념입니다. 
  • 예를 들어 다음 그림과 같은 경우가 있을 수 있다.

  • 이름, 나이, 직업, 취미 등은 Key 값이 되고 각 Key 에 해당하는 이지수, 30세, 회사원, 수영 등이 value 값이 됩니다. 
  • Map 은 자료를 저장할 때 순서가 없기 때문에 index 도 없습니다.
  • 따라서 자료를 찾을 때 index 대신 key를 사용합니다. 

  • 이렇게 key-value 쌍으로 된 자료를 관리할 때 Map 을 유용하게 사용할 수 있습니다. 
  • Map 은 기본적으로 검색용 자료 구조입니다. 
  • 어떤 key 값을 알고 있을 때 value 를 찾기 위한 자료 구조입니다. 
  • Map 인터페이스에 선언된 주요 메서드는 다음과 같습니다. 

boolean isEmpty( ) Map 이 비었는지 여부를 반환합니다.
boolean containsValue(Object value)  Map 에 해당 value 가 있는지 여부를 반환합니다.

컬렉션 패키지 실습 준비

  • 그러면 간단한 회원 관리 프로그램을 만들면서 컬렉션 프레임워크에서 제공하는 각 클래스를 실습해 봅시다
  • 회원 관리 프로그램에서 회원 추가, 회원 삭제, 전체 회원 정보 출력 기능을 구현합니다. 
  • 모든 실습을 마치고 나면 collection 패키지와 map 패키지 하위에 사용할 클래스에 따른 패키지가 완성될 것입니다.
  • 실무에서 일할 때는 이와 같이 계층적으로 패키지 구조를 잡아 소스 코드 파일을 구분하여 사용합니다. 
  • 계층 구조를 좀 더 명확하게 보려면 Package Explorer 에서 Package Presentation -> Hierarchical 을 선택합니다. 
  • 그러면 collection 패키지 하위에 프로그램 전반에서 공통으로 사용할 '회원'을 나타내는 Member 클래스를 만들어 보겠습니다. 
package collection;

public class Member {
	private int memberId;
	private String memberName;
	public Member(int memberId, String memberName) {
		super();
		this.memberId = memberId;
		this.memberName = memberName;
	}
	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;
	}
	@Override
	public String toString() {
		return memberName + " 회원님의 아이디는 " + memberId + "입니다";
	}
}
  • 간단하게 member 클래스를 만들었습니다.
  • member 클래스는 앞으로 실습할 때 계속 사용할 것입니다.