메소드
[접근제한자][예약어] 반환형 메소드명( [매개변수] ) {
// 기능 정의
}
package edu.kh.oop.method.model.vo;
public class Member {
//필드
private String memberId; //아이디
private String memberPw; //비번
private String memberName; //이름
private int memberAge; //나이
//기본 생성자
public Member() {}
//매개변수 생성자 (필드 모두 초기화 용도)
public Member(String memberId, String memberPw,
String memberName, int memberAge) {
//오버로딩 적용(매개변수의 개수가 다름)
//전달받은 값을 필드로 옮겨담기
this.memberId = memberId;
this.memberPw = memberPw;
this.memberName = memberName;
this.memberAge = memberAge;
}
// 기능 (getter/setter)
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getMemberPw() {
return memberPw;
}
public void setMemberPw(String memberPw) {
this.memberPw = memberPw;
}
public String getMemberName() {
return memberName;
}
//매개변수로 전달받은 값을 memberName 필드에 대입
//매개변수 == 전달받은 값을 지니고 있는 변수
public void setMemberName(String memberName) {
// set + 필드명
this.memberName = memberName;
}
public int getMemberAge() {
return memberAge;
}
public void setMemberAge(int memberAge) {
this.memberAge = memberAge;
}
}
package edu.kh.oop.method.model.service;
import java.util.Scanner;
import edu.kh.oop.method.model.vo.Member;
public class MemberService { //클래스
// 속성(필드)
private Scanner sc = new Scanner(System.in);
//System.in: 자바에서 기본적으로 지정해둔 입력 장치(키보드)
private Member memberInfo = null; //가입한 회원의 정보를 저장할 변수
private Member loginMember = null; // 로그인한 회원의 정보를 저장할 변수
// 기능 (생성자, 메소드)
public MemberService() {}//기본 생성자
// **메소드 작성법**
//[접근제한자] [예약어] 반환형 메소드명([매개변수]) {}
//public static 기본자료형
//protected final 참조형(배열, 클래스)
//(default) abstract void
//private static final
//**반환형 void**
//- 반환(return)이란? 메소드 수행 후 호출부로 돌아가는 것
//- 반환 값: 돌아가면서 가져갈 결과 값
//- 반환형: 반환 값의 자료형
//-> void: 돌려보낼 값(반환 값)이 없다.
public void displayMenu() { //메뉴 화면 출력 기능
int menuNum = 0; //메뉴 선택용 변수
do { //한 번은 무조건 반복
System.out.println("====회원 정보 관리 프로그램 v1====");
System.out.println("1. 회원가입");
System.out.println("2. 로그인");
System.out.println("3. 회원정보 조회");
System.out.println("4. 회원정보 수정");
System.out.println("0. 프로그램 종료");
System.out.print("메뉴 입력 >> ");
menuNum = sc.nextInt(); //필드에 작성된 Scanner sc 사용
sc.nextLine(); //입력 버퍼에 남은 개행 문자 제거
switch(menuNum) {
case 1 : System.out.println(signUp()); break;
//같은 클래스 내부에 있는 필드, 메소드는 이름만 불러도 호출 가능
//signUp() 메소드를 호출하여 수행 후 반환 받은 값을 출력
case 2 : System.out.println(login()); break;
case 3 : System.out.println(selectMember()); break;
case 4 :
int result = updateMember(); //회원정보 수정 메소드 수행 후
// 반환되는 결과를 result 변수에 저장
if (result == -1) {
System.out.println("로그인 후 이용해주세요.");
}else if (result == 0) {
System.out.println("회원정보 수정 실패(비밀번호 불일치)");
}else { //result ==1
System.out.println("회원정보가 수정되었습니다.");
}
break;
case 0 : System.out.println("프로그램을 종료합니다."); break;
default : System.out.println("잘못 입력하셨습니다. 다시 입력하세요."); break;
}
} while(menuNum!=0);
}
public String signUp() { //회원가입 기능
// (반환형)
// 해당 메소드가 끝나고 호출한 곳으로 돌아갈 때
// void: 반환할 값이 없다.
// String: String 자료형 값을 가지고 돌아간다.
System.out.println("\n*****회원가입 기능*****");
System.out.print("아이디: ");
String memberId = sc.next();
System.out.print("비밀번호: ");
String memberPw = sc.next();
System.out.print("비밀번호 확인: ");
String memberPw2 = sc.next();
System.out.print("이름: ");
String memberName = sc.next();
System.out.print("나이: ");
int memberAge = sc.nextInt();
//비밀번호, 비밀번호 확인이 일치하면 회원가입 성공
//일치하지 않으면 회원가입 실패
if(memberPw.equals(memberPw2)) { //일치하는 경우 //String 타입 equals
//입력받은 정보를 이용해 Member 객체를 생성한 후
//생성된 객체의 주소를 필드에 있는 memberInfo에 대입
memberInfo = new Member(memberId, memberPw, memberName, memberAge);
return "회원가입 성공";
}else { //일치하지 않는 경우
return "회원가입 실패(비밀번호 불일치)";
}
}
public String login() { //로그인 메소드(기능)
System.out.println("\n*****로그인*****");
//회원가입 여부 확인
// == memberInfo가 객체를 참조하고 있는지 확인
if (memberInfo == null) { //회원가입을 먼저 안 한 경우
//null: 아무것도 참조하고 있지 않음
return "회원가입부터 진행해주세요";
} //else를 쓰지 않아도 조건 불만족 시 아래 코드 자동 실행
System.out.print("아이디 입력: ");
String memberId = sc.next();
System.out.print("비밀번호 입력: ");
String memberPw = sc.next();
//회원가입 정보 (memberInfo가 참조하는 Member객체)에서
//저장된 아이디, 비번이
//입력된 아이디, 비번과 같으면 "로그인 성공"
//일치하지 않으면 "아이디 또는 비밀번호가 일치하지 않습니다."
//아이디 비번이 모두 일치할 경우
if (memberInfo.getMemberId().equals(memberId) &&
memberInfo.getMemberPw().equals(memberPw)) {
//입력받은 memberId와
//memberInfo 필드에서 참조 중인 Member 객체의 memberId가 같은지 확인
loginMember = memberInfo;
// 참조형 = Member 객체 주소(얕은 복사)
// 회원가입 정보를 loginMember에 대입하여
// 어떤 회원이 로그인했는지 구분할 수 있게 함
return loginMember.getMemberName() + "님 환영합니다.";
}else {
return "아이디 혹은 비밀번호가 일치하지 않습니다.";
}
}
public String selectMember() {//회원정보 조회 기능
System.out.println("\n*****회원정보 조회*****");
//1) 로그인 여부 확인 -> 필드 loginMember가 참조하는 객체가 있는지 확인
if (loginMember == null) { //loginMember가 참조하는 객체가 없을 경우
return "로그인 후 이용바랍니다." ;
//return 구문이 수행되면 해당 메소드는 즉시 종료되고 호출한 곳으로 돌아감
}
//2) 로그인이 되어있는 경우
// 회원정보를 출력할 문자열을 만들어 반환(return)
// 단, 비밀번호는 제외
//이름: 유저일
//아이디: user01
//나이: 25세
//String edu.kh.oop.method.model.vo.Member.getMemberName()
//반환형 메소드 코드 위치
String str ="이름: " + loginMember.getMemberName();
str += "\n아이디: " + loginMember.getMemberId();
str += "\n나이: " + loginMember.getMemberAge() + "세";
return str;
}
public int updateMember() { //회원정보 수정(update)기능
System.out.println("\n****회원정보 수정****");
//1) 로그인 여부 판별
// 로그인이 되어있지 않으면 -1 반환
if (loginMember == null) {
return -1;
}
//2) 수정할 회원 정보 입력 받기(이름, 나이)
System.out.print("수정할 이름 입력: ");
String inputName = sc.next();
System.out.print("수정할 나이 입력: ");
int inputAge = sc.nextInt();
sc.nextLine(); //주의!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//3) 비밀번호를 입력받아 로그인한 회원의 비번과 일치하는지 확인
System.out.print("비밀번호 입력: ");
String inputPw = sc.nextLine();
if (loginMember.getMemberPw().equals(inputPw)) {
//4) 비번이 같을 경우
// 로그인한 회원의 이름, 나이 정보를 입력받은 값으로 변경후
// 1 반환
loginMember.setMemberName(inputName);
//입력받은 inputName을
//loginMember가 참조하는 Member 객체의 필드 memberName에 대입
loginMember.setMemberAge(inputAge);
return 1;
}else {
//5) 비번이 다를 경우 0 반환
return 0;
}
}
}
package edu.kh.oop.method.run;
import edu.kh.oop.method.model.service.MemberService;
public class MemberRun {
public static void main(String[] args) {
// [접근제한자] [예약어] [반환형] 메소드명([매개변수])
MemberService service = new MemberService(); //기본생성자
//MemberService의 기본 생성자가 작성되어 있지 않지만
//문제없이 사용가능
//왜 그런가?
//->컴파일러가 코드를 번역할 때 클래스 내부에 생성자가 하나도 없다면
// 자동으로 기본 생성자를 추가해줌
//!!주의!! 생성자가 하나라도 있으면 자동 생성 안 해줌
// The constructor MemberService() is undefined
service.displayMenu();
}
}