본문 바로가기

국비교육/국비교육 복습

day14_api.lang.String_Test02 : equals 메소드를 이용한 문자열 비교 + 클래스의 인스턴스 비교 (★★)

사용자에게 아이디와 비밀번호를 입력받아서 로그인을 처리하는 프로그램을 구현

  • 아이디는 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();
	}
}