본문 바로가기
JAVA

java공부 - 회원관리 프로그램 만들기

by Big Sun 2022. 3. 11.
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