국비 12

냐아암·2023년 4월 30일
0

국비

목록 보기
16/114

메소드

[접근제한자][예약어] 반환형 메소드명( [매개변수] ) {
// 기능 정의
}

  • 반환형 void
    -반환(return)이란? 메소드 수행 후 호출부로 돌아가는 것
    -반환 값: 돌아가면서 가져갈 결과 값
    -반환형: 반환 값의 자료형
    -> void: 돌려보낼 값(반환 값)이 없다.

Member

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;
	}
	
	
	

}

MemberService

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;
		}
		
	}
	

}

MemberRun

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();

	}

}
profile
개발 일지

0개의 댓글