import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
class User {
public void run() {
login();
}
private int login() {
Scanner sc = new Scanner(System.in);
Map<String, String> user = new HashMap<>();
user.put("kyu", "1234");
while(true) {
System.out.println("아이디와 패스워드를 입력해주세요.");
System.out.print("아이디 >> ");
String userId = sc.next();
System.out.print("패스워드 >> ");
String userPw = sc.next();
if (!user.containsKey(userId)) {
System.out.println("존재하지 않는 아이디입니다.");
continue;
}
else {
if (!user.get(userId).equals(userPw)) {
System.out.println("비밀번호가 틀렸습니다.");
}
else {
System.out.println("접속 성공!");
return 1;
}
}
}
}
}
아이디와 패스워드. 두 가지 값이 있다. List, Set, Map 중에 선택을 한다면 Map에 데이터를 담고 싶다. 두 가지 값을 비교하는 데 List, Set은 어떻게 써야할까? 미리 코드에서 아이디와 패스워드를 설정해주었다. containsKey
를 통해서 userId
가 Map에 담겨져 있는지 아닌지를 체크한다. userId
가 입력되었다면, 비밀번호가 Key값인 userId
가 Value값인 userPw
와 일치하는지 equals를 통해 값을 확인한다.
user.put("kyu", "1234");
이라고 직접 아이디 패스워드를 설정해주는 게 아니라 프로그램 사용자로부터 직접 생성하도록 하려면? (아마도 키워드는 파일 입출력?)
Scanner 인스턴스만들때 System.in이라는 특정한 매개변수를 같이 넣어주니까 이것도 생성자인가?
return
값을 받아서 일련의 "login" 절차가 완료되었다는 것을 가독성을 위해 표현하고 싶다. 예를 들어서, 로그인 완료라는 상태를 loginStatus
라는 변수에 1
을 담아서 표현하는 것이다. 그리고 loginStatus
가 1
일 때, 메뉴가 선택가능하게 하는 것이다. 코드 작성할 때에도 이 메소드에 대해서 신경 끌 수 있고 말이다.
컬렉션 인터페이스에 대해 다시 공부하기. Map<String, String> user = new HashMap<>();
에서 우항에 비어있는 꺽새는 왜 비어있는지 나도 모르겠다. Map 중에서 가장 자주 쓰인다는 HashMap에서도 다시 공부해야겠다.
sc.close();
는 어디에 붙여야하나? while문 안에 넣으니까 에러나서
클래스에서의 접근 제어자 public과 default가 어떤 차이점을 가지는지 배웠고, 의식해서 구분하여 쓰도록 노력했다. default는 패키지 내부에서만 쓸 수 있다. 메소드에서도 접근 제어자를 쓰도록 했다. public 으로 할필요가 없는 것은 클래스 내부에서만 쓸 수 있도록 private으로 했다.
메소드와 클래스를 유기적으로 사용하고 싶었는데 조금은 감을 터득한것 같다. 처음에 login
메소드를 return 값이 없는 void로 선언했었다. 이유는, 리턴값이 있을 경우에는 메소드 안에 있는 로직과 상관없이 "오직" 리턴값만 나온다고 생각했다. 테스트로 void를 int로 바꾸어서 실험해봤는데 모든 출력이 정상적으로 콘솔에 나왔다.
Map 의 기본적인 사용법을 익혔다. 특히, user.get(userId)
는 userId
가 가르키는 userPw
의 value값을 출력한다. 그리고 user.get(userPw)
는 null 값을 가진다.