사용자에게 아이디와 비밀번호를 입력받아서 로그인을 처리하는 프로그램을 구현
- 아이디는 khacademy, 비밀번호는 student일 경우에만 로그인 성공 메세지 출력
- 그 외는 로그인 불가 메세지 출력
(추가) 허용 아이디와 비밀번호 개수를 늘려보세요
메인 메소드
package day14_api.lang.String;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
// ID, PW
String id = "khacademy";
String pw = "student";
Scanner sc = new Scanner(System.in);
// 입력
System.out.print("ID 입력 : ");
String idInput = sc.next();
System.out.print("PW 입력 : ");
String pwInput = sc.next();
// 판별
boolean check = idInput.equals(id) && pwInput.equals(pw);
// 출력
if(check) {
System.out.println("로그인 성공!");
}
else {
System.out.println("로그인 실패!");
}
sc.close();
}
}
- 문자열 비교시 String 클래스의 equals 메소드를 사용한다 (String 클래스의 인스턴스를 비교하는 것임)
- equals 메소드는 boolean을 반환한다 (true / false)
변수명1.equals(변수명2);
(추가) 허용 아이디와 비밀번호 갯수 늘리기
방법 1. 배열을 이용
package day14_api.lang.String;
import java.util.Scanner;
public class Test02_1 {
public static void main(String[] args) {
// ID, PW (배열을 생성하여 값을 직접 입력)
String[][] user = new String[][] {
{"Tester1", "1111"},
{"Tester2", "2222"},
{"Tester3", "3333"},
{"Tester4", "4444"},
};
Scanner sc = new Scanner(System.in);
// 입력
System.out.print("ID 입력 : ");
String idInput = sc.next();
System.out.print("PW 입력 : ");
String pwInput = sc.next();
// 판별
boolean check = false;
for(int i = 0 ; i < user.length ; i ++) {
check = idInput.equals(user[i][0]) && pwInput.equals(user[i][1]);
if(check) {
break;
}
}
// 출력
if(check) {
System.out.println("로그인 성공!");
}
else {
System.out.println("로그인 실패!");
}
sc.close();
}
}
방법 2. equals 메소드를 이용하여 두 인스턴스가 같음을 비교
Member 클래스
package day14_api.lang.String;
import java.util.Objects;
// 허용 아이디와 비밀번호(인스턴스) 갯수를 늘리기 위한 클래스
public class Member {
// 멤버 필드
private String id;
private String pw;
// getter & setter
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return this.pw;
}
public void setPw(String pw) {
this.pw = pw;
}
// 생성자
public Member(String id, String pw) {
this.setId(id);
this.setPw(pw);
}
// 메소드
// equals 재정의 (인스턴스끼리 비교할 때 '같다'의 기준을 재정의한다)
@Override
public int hashCode() {
return Objects.hash(id, pw);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Member other = (Member) obj;
return Objects.equals(id, other.id) && Objects.equals(pw, other.pw);
}
}
- 클래스의 서로 다른 두 인스턴스를 비교할 때 equals 메소드를 재정의(오버라이딩)해야 한다
** '같다'의 기준을 정해줘야 한다
i) 서로 다른 두 인스턴스 각각의 id 필드의 값이 같으면 두 인스턴스는 같다 (X)
ii) 서로 다른 두 인스턴스 각각의 pw 필드의 값이 같으면 두 인스턴스는 같다 (X)
iii) 서로 다른 두 인스턴스 각각의 id 필드와 pw 필드의 값이 모두 같으면 두 인스턴스는 같다 (O)
메인 메소드
package day14_api.lang.String;
import java.util.Scanner;
public class Test02_2 {
public static void main(String[] args) {
// ID, PW 추가 (Member 클래스의 인스턴스로서 추가)
// 인스턴스로 배열 생성 - 인스턴스도 배열을 생성할 수 있다
Member[] member = new Member[] {
new Member("Tester1", "1111"),
new Member("Tester2", "2222"),
new Member("Tester3", "3333"),
new Member("Tester4", "4444")
};
Scanner sc = new Scanner(System.in);
// 입력
System.out.print("ID 입력 : ");
String idInput = sc.next();
System.out.print("PW 입력 : ");
String pwInput = sc.next();
// 입력 정보를 담고있는 로그인용 인스턴스 생성
Member user = new Member(idInput, pwInput);
// 판별 - 인스탄스간의 '같다' 비교는 equals로 한다
boolean check = false;
for(int i = 0 ; i < member.length ; i ++) {
if(member[i].equals(user)) {
check = true;
break;
}
}
// 출력
if(check) {
System.out.println("로그인 성공!");
}
else {
System.out.println("로그인 실패!");
}
sc.close();
}
}