[JAVA개념공부]Collection Framework, Map메소드 사용법

2021. 5. 30. 10:47컴퓨터과학

728x90
반응형

Collection Framework

ㆍCollection : 객체의 집합.(데이터의 집합)

ㆍCollection Framework : 자료구조를 구현하는 클래스의 인터페이스 제공

인터페이스

Collection
인터페이스 구성
요약 종류 Collection Interface와의 관계 자식
Set 중복 불허, 순서 없이 객체삽입.
중복여부를 equals 메소드로 판단하기 때문에 메소드 생성 시 ‘equals’메소드 Override가 필요함.
HashSet, TreeSet Collection의 자식 sorted set
List (Sequence) - 시작과 끝을 가진 선형구조 : 배열구조
중복 데이터 허용
Vector, Stack, ArrayList, Collection의 자식 -
LinkedList : 중간데이터 관리 수월(추가, 삭제 등)
Map - Map key(중복 불허)와 value쌍(중복 허용)으로 이루어진 객체
- Hash알고리즘으로 key값 읽어 오는 게 빠름
- key값은 value값을 가리킨다.
HashTable
HashMap
Collection의 자식X sorted map
TreeMap : 정렬해서 관리한다.

 

 

- Set은 중복 데이터 저장이 불가능하다. HashSet은 정렬되지 않은 데이터셋이다.

 

- Set은 중복 데이터 저장이 불가능하다. TreeSet은 정렬된 데이터셋이다.

 

 

 

 

Map구조를 통한 회원가입, 로그인 관리 프로그램 코딩 예시

※학생 개인 실습 내용입니다. 부족한 점이 있을 수 있음을 인지 해 주시길 부탁드립니다.

package day08;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Prob_이광용_수정 {
	public static void main(String[] args) throws NotExistIDException, WrongPasswordException {
		MemberService0 mem = new MemberService0();
		mem.joinMember0(new Member0("lgy1", "1", "이광용1"));
		mem.joinMember0(new Member0("lgy2", "q1w2e3", "이광용2"));
		mem.login("lgy1", "1");
		mem.login("lgy2", "q1w2e3");

		
	}
}
/**
 * 회원가입, 로그인 함수를 포함한 클래스
 * 
 * @author leest
 *
 * @param <P>
 */
class MemberService0 {
	Map<String, Member0> map = new HashMap<String, Member0>(); // 기본키 String = id
	
	Member0[] members;
	
	void joinMember0(Member0 member) { 
		map.put(member.getId(), member);
		System.out.print("가입 성공 : " + map.get(member.getId()) +"\n");
//		System.out.println(" map size ="+ map.size());
	}
	
	public void login(String id, String pw) throws NotExistIDException, WrongPasswordException {
		map.forEach((key,v) -> {
			if (map.get(key).getId() != null) {
				if (map.get(key).getId().equals(id) && map.get(key).getPw().equals(pw)) {
					System.out.print(map.get(key) + "  로그인성공   \n");
				} else if(map.get(key).getId().equals(id) && !map.get(key).getPw().equals(pw)){
					System.out.println("Pw가 틀림.");
					//throw new WrongPasswordException();
				}
			} else {
				System.out.println("없는Id");
				//throw new NotExistIDException();
			}			
		});
		
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((map == null) ? 0 : map.hashCode());
		result = prime * result + Arrays.hashCode(members);
		return result;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MemberService0 other = (MemberService0) obj;
		if (map == null) {
			if (other.map != null)
				return false;
		} else if (!map.equals(other.map))
			return false;
		if (!Arrays.equals(members, other.members))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "MemberService0 [map=" + map + ", members=" + Arrays.toString(members) + "]";
	}
	
	
}

/**
 * 멤버변수 포함하는 클래스
 * 
 * @author leest
 *
 * @param <P>
 */
class Member0<P> {
	private String id;
	private String pw;
	private String name;

	public Member0() {
		super();
	}

	public Member0(String id, String pw, String name) {
		super();
		this.id = id;
		this.pw = pw;
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Member0 [id=" + id + ", pw=" + pw + ", name=" + name + "]";
	}

}


//class MemberService0<P>{
//	Member0[] members;
//	int count = 0;
//	
//	MemberService0(int size) {
//		members = new Member0[size > 0 ? size : 100];
//	}
//	
//	void joinMember0(Member0 member) {
//		if (members.length == count) {
//			Member0[] temp = new Member0[members.length * 2];
//			System.arraycopy(members, 0, temp, 0, members.length);
//			members = temp;
//			temp = null;
//		}
//		members[count++] = member;
//	}
//	
//	public Member0 login(String id, P pw) throws NotExistIDException, WrongPasswordException {
//		Member0 data = null;
//		for (int i = 0; i < count; i++) {
//			if (members[i].getId().equals(id)) {
//				if (members[i].getPw().equals(pw)) {
//					System.out.printf("%s 로그인 완료! \n", members[i].getId());
//					return members[i];
//				} else {
//					if (i == count - 1) {
//						throw new WrongPasswordException();
//					}
//				}
//			} else {
//				if (i == count - 1)
//					throw new NotExistIDException();
//			}
//		}
//		return data;
//	}
//}

/**
 * 로그인에 대한 예외처리 클래스
 * 
 * @author leest
 *
 */
class WrongPasswordException extends Exception {

	public WrongPasswordException() {
		super("※ pw가 틀렸습니다 ※");
	}

	public WrongPasswordException(String msg) {
		super(msg);
	}
}

class NotExistIDException extends Exception {
	public NotExistIDException() {
		super("※ id가 틀렸습니다 ※");
	}

	public NotExistIDException(String pw) {
		super(pw);
	}
}
728x90
반응형