Java/Java

Java 컬렉션 프레임워크 Map(HashMap) #로그인 코드 만들기

검은고양이개발자 2023. 1. 14. 19:26
반응형

 

컬렉션 프레임워크에 속하는 Map 인터페이스는 무엇일까요?


 

Map 인터페이스는 List, Set과 다르게 {key와 value} 쌍으로 데이터를 저장하는 컬렉션을 구현하는 데에 사용됩니다.

키와 값으로 구성된 객체는 Entry 객체라고 하며 Entry 객체를 활용하여 또 다른 메서드를 사용할 수도 있습니다.

 

Map에서 키는 List에서 index 역할과 같이 주로 식별하는 역할을 하며

이러한 특징 때문에 중복 저장될 수 없고, 반면에 값은 중복 저장이 가능합니다.

 

List의 (int index, object o )=  Map (Key, value)  라고 생각하면 이해하기 쉬울 것 같네요

 

Map 인터페이스는 HashMap, HashTable, SortedMap, TreeMap 등의 클래스에서 구현되며

키를 매개값으로 갖는 매서드 및 다양한 매서드들이 존재합니다.

 

  리턴타입 메서드 설명
List void add(int index,Object o) 인덱스에 객체를 추가
Map Object put(Object key, Object value) 키로 값을 저장, 만약 새로운 키라면 null을 리턴,
기존의 키가 있을 경우 대체되는 value값이 리턴된다.
List Object get(int index) 인덱스에 저장된 객체를 반환
Map Object get(Object key) 키에 해당하는 value값을 리턴합니다.

위의 표는 List와 Map 을 비교하여 메서드를 정리한 표이다.

 

Map을 구현하는 클래스 중 HashMap의 특징은 Entry가 삽입되는 순서와 위치가 관계가 없기 때문에

많은 양의 데이터를 검색하는 데 장점이 있습니다.

 

또한, key와 value값을 포함하고 있는 Entry 객체는 Map인터페이스 내부 인터페이스인 Entry 인터페이스를 구현하며,

Map.Entry 인터페이스에는 Entry를 기반으로 메서드가 정의되어 있습니다.

 

리턴타입 메서드 설명
Object getKey() Entry 객체에 있는 Key 객체를 반환합니다.
Object setValue(Object value) Entry 객체의 value를 입력하는 value로 교체합니다

 

public class CordJgMap {
    public static void main(String[] args) {

        HashMap<String, Object> idPassword = new HashMap<>();

        idPassword.put("고양이", "cuty" + 4 + '!');
        idPassword.put("강아지", "cuty" + 4 + '!');

        System.out.println(idPassword.put("고양이", "cuty" + 3 + '!'));

        Object password = idPassword.get("고양이");

        System.out.println(idPassword);

        System.out.println(password);

        System.out.println(idPassword.size());

        Set<Map.Entry<String, Object>> entrySet = idPassword.entrySet();

        Iterator<Map.Entry<String, Object>> entryIterator = entrySet.iterator();

        while (entryIterator.hasNext()) {
            Map.Entry<String, Object> entry = entryIterator.next();
            String id = entry.getKey();
            Object passnumber = entry.getValue();
            System.out.println(id + " : " + passnumber);
        }

        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("아이디와 비밀번호를 입력해 주세요");
            System.out.println("아이디");
            String id = scanner.nextLine();

            System.out.println("비밀번호");
            String passN = scanner.nextLine();

            if (idPassword.containsKey(id)) {
                if (idPassword.get(id).equals(passN)) {
                    System.out.println("로그인 되었습니다.");
                    break;
                } else System.out.println("비밀번호가 일치하지 않습니다. ");
            } else System.out.println("입력하신 아이디가 존재하지 않습니다.");
        }
    }
}
//출력
cuty4!
{고양이=cuty3!, 강아지=cuty4!}
cuty3!
2
고양이 : cuty3!
강아지 : cuty4!
아이디와 비밀번호를 입력해 주세요
아이디
고양이
비밀번호
cuty3!
로그인 되었습니다.

위의 코드는 HashMap을 이용하여 마치 우리가 로그인 할 때 사용되는 id와 password처럼

만들어본 코드입니다.

 

HashMap의 제너럴<> 에는 각각 key와 value의 타입을 적어주고 새로운 객체를 만들어 참조변수에 넣어줍니다

참조변수. put(key, value)를 이용해 HashMap 안에 새로운 entry 객체를 만들 수 있으며

참조변수. put(key, value)를 출력했을 때 key값이 기존에 있었다면 바뀌어진 value 값이 리턴,

새로운 key 값이라면 null이 출력됩니다.

참조변수. get(key)를 통해 value값을 얻을 수 있고

참조변수. size()를 통해 entry 객체가 몇 개 있는지 알 수 있습니다.!

 

또한 ,  entry에 있는 각 key와 value를 따로 구분해서 표현하는 방법이 있는데

이를 위해서는 HashMap에 있는 entry를 entrySet() 통해 Set인 새로운 객체를 만들고 

Iterator 화 하여 나타낼 수 있습니다.

 

직접 코딩을 해보면서 key와 value 의 타입도 변경해 보고 , 마치 자기의 아이디와 비밀번호를 설정하듯 

key와 value의 값도 변경해보세요!

---------------------------------------------------------------------------------------

Scanner 밑에는 아이디와 비번을 통해 로그인을 구현하는 코드입니다

반응형