728x90
package program;
public class Member {
private String name;
private int age;
private String phoneNum;
public Member(String name, int age, String phoneNum) {
super();
this.name = name;
this.age = age;
this.phoneNum = phoneNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member member = (Member)obj;
boolean bool = this.name.equals(member.name)
&& this.age == member.age &&
this.phoneNum.equals(member.phoneNum);
return bool;
}else {
return false;
}
}
@Override
public int hashCode() {
return (name + age +phoneNum).hashCode();
}
public void disp() {
System.out.println("이름 : " + name + "나이 : " + age + "핸드폰 번호 : " + phoneNum);
}
}
equals() 메소드와 hashCode()메소드를 오버라이드한 이유
Set 컬렉션은 List 컬렉션과달리 저장 순서가 유지되지 않는다. 또한 객체를 중복해서 저장할 수 없다.
Set 컬렉션에서 동일한 객체인지 구별하는 방법은 해쉬코드 비교와 equals메소드를 사용하는 것입니다.
하지만 , Object 클라스의 hashCode() 메소드와 equals() 메소드는 객체의 번지를 비교하기 때문에 String 클라스 equals 메소드, hashCode()메소드와 같이 사용하려면 override 해줘야합니다.
package program;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
public class MemberServiceimpl implements MemberService {
private HashSet<Member> set = new HashSet<>();
private Scanner scan = new Scanner(System.in);
@Override
public void viewAll() {
Iterator<Member> iter = set.iterator();
while(iter.hasNext()){
Member mem = iter.next();
mem.disp();
}
return;
// 회원목록 보여주기
}
@Override
public void view() {
System.out.println("회원님의 이름을 입력해주세요 ~");
String name = scan.next();
Iterator<Member> iter = set.iterator();
while(iter.hasNext()) {
Member view = iter.next();
if(view.getName().equals(name)) {
// equals랑 비교연산자의 차이점 **
view.disp();
}
else{
System.out.println(name + "님은 회원이 아닙니다.");
}
}
// 이름 입력받아 회원의 나이와 전화번호 출력
}
@Override
public void insert() {
System.out.println("회원등록을 시작합니다.");
System.out.println("이름을 입력해주세요");
String name = scan.next();
System.out.println("나이을 입력해주세요");
int age = scan.nextInt();
System.out.println("전화번호를 입력해주세요");
String phoneNum = scan.next();
set.add(new Member(name,age,phoneNum));
System.out.println("회원 등록이 완료되었습니다.");
return;
// 이름,나이,전화번호를 입력해 회원등록
}
@Override
public void edit() {
System.out.println("회원님의 이름을 입력해주세요 ~");
String name = scan.next();
Iterator<Member> iter = set.iterator();
while(iter.hasNext()) {
Member edit = iter.next();
if(edit.getName().equals(name)) {
System.out.println("회원님의 변경할 나이를 입력해주세요");
int age = scan.nextInt();
edit.setAge(age);
System.out.println("회원님의 변경할 휴대폰 번호를 입력해주세요");
String phoneNum = scan.next();
edit.setPhoneNum(phoneNum);
return;
}
}
System.out.println(name + "님은 저희 회원이 아닙니다.");
// 회원정보 수정
}
@Override
public void delete() {
System.out.println("회원님의 이름을 입력해주세요 ~");
String name = scan.next();
Iterator<Member> iter = set.iterator();
while(iter.hasNext()) {
Member delete = iter.next();
if(delete.getName().equals(name)) {
set.remove(delete);
System.out.println(name + "회원을 삭제하였습니다.");
return;
}
}
System.out.println(name + "님은 회원이 아닙니다.");
// 이름을 입력받아 회원정보 삭제
}
}
view.getName().equals(name) 와 view.getName() == name 의 차이점
둘 다 비교하는 것인 데 어떤 차이가 있을까?
euqals()는 문자열을 비교하는 것이고, == 는 객체의 값(주소)를 비교하는 것이다.
따라서, 문자열을 비교한는 것인 지 일반적인 데이터타입을 비교하는 것인 지 판단한 후에 둘 중에 하나를 선택하여 사용해야한다.
package program;
import java.util.Scanner;
public class MemberMain {
public static void main(String[] args) {
MemberService service = new MemberServiceimpl();
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("###########회원 관리 프로그램 #################");
System.out.println("## 1. 회원목록 2. 회원조회 3. 회원등록 ##");
System.out.println("## 4. 회원수정 5.회원삭제 6. 종료 ##");
System.out.println("###########회원 관리 프로그램 #################");
System.out.println("메뉴입력 : ");
int choice = scan.nextInt();
switch(choice) {
case 1:
service.viewAll();
break;
case 2:
service.view();
break;
case 3:
service.insert();
break;
case 4:
service.edit();
break;
case 5:
service.delete();
break;
case 6:
System.out.println("프로그램을 종료합니다.");
System.exit(0);
default :
System.out.println("잘못 입력하였습니다.");
}
}
}
}
java 공부 도중에 간단한 회원관리 프로그램을 만들어 보았다.
감사합니다.
728x90
'JAVA' 카테고리의 다른 글
java 공부 - 간단한 예약 시스템 만들기 (0) | 2022.03.18 |
---|---|
java 공부 - 명품 JAVA 프로그래밍 4장 Open Challenge (0) | 2022.03.17 |
java 공부 - 문자를 유니코드 변환하는 방법 (0) | 2022.03.09 |
java공부 - 객체와 클래스를 이용하여 계산기 만들기 (0) | 2022.02.23 |
JAVA 간단한 게임 만들기 - 가위바위보, 로또게임 만들어보기 (0) | 2022.02.19 |