




메소드 반환형

메소드 매개변수

가변인자는 잘 사용하지 않음




getter : 안에 있는 값 → 밖으로 보낸다

setter : 밖에 있는 값 → 객체 안으로 가져오게 한다(세팅해준다)

해당 메소드를 종료하고 자신을 호출한 메소드로 돌아가는 예약어
반환 값이 있다면 반환 값을 가지고 자신을 호출한 메소드로 돌아감

stack : 쌓였다, main method 위에 method 1 위에 method2
컵에 위에서 아래로 쌓이는 느낌
메소드를 호출하면 호출할수록 위에 쌓임
stack에 남아있는 것이 없을 때까지 진행함
last in first out
메소드를 만들면 변수 선언
method
class MemberService + update 숙제
회원가입, 로그인, 회원 정보 조회, 회원 정보 수정, 프로그램 종료
package edu.kh.oop.method.model.service;
import java.util.Scanner;
import edu.kh.oop.method.model.vo.Member;
public class MemberService { // 클래스
// public MemberService(int a) {}
// 속성(필드)
private Scanner sc = new Scanner(System.in);
// System.in : 자바에서 기본적으로 지정해둔 입력 장치(키보드)
private Member memberInfo = null; // 회원가입 : 가입한 회원의 정보를 저장할 변수
private Member loginMember = null; // 로그인 : 로그인한 회원의 정보를 저장할 변수
// 기능(생성자, 메소드)
public MemberService() {} // 기본 생성자
// ** 메소드 작성법 **
// [접근제한자] [예약어] 반환형 메소드명([매개변수]){}
// public static 기본자료형
// protected final 참조형(배열, 클래스)
// (dafault) abstract void
// private static final
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 사용
switch(menuNum) {
case 1 : System.out.println(signUp()); break;
case 2 : System.out.println(login()); break;
case 3 : System.out.println(selectMember()); break;
case 4 : System.out.println(updateMember()); break;
case 0 : System.out.println("프로그램을 종료합니다"); break;
default : System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
}
} while(menuNum !=0);
}
// 회원 가입 기능
public String signUp() {
// void는 반환형인데, 해당 메소드가 끝나고 호출한 곳으로 돌아갈 때 반환할 값이 없다
// String : String 자료형 값을 가지고 돌아간디
// 같은 클래스 내부에 있는 필드, 메소드는 이름만 불러도 호출 가능!
System.out.println("\n********* 회원 가입 ***********");
System.out.print("아이디 : ");
String memberId = sc.next();
System.out.print("비밀번호 : ");
String memberPw1 = sc.next();
System.out.print("비밀번호 확인 : ");
String memberPw2 = sc.next();
System.out.print("이름 : ");
String memberName = sc.next();
System.out.print("나이 : ");
int memberAge = sc.nextInt();
// 비밀번호, 비밀번호 확인이 일치하면 회원가입
// 일치하지 않으면 회원가입 실패
if(memberPw1.equals(memberPw2)) { // 일치하는 경우
// 입력 받은 정보를 이용해서 Member 객체를 생성한 후
// 자바에서의 객체는 new연산자이기에 new 사용
// new Member(memberId, memberPw1, memberName, memberAge);
// 생성된 객체의 주소를 필드에 있는 memberInfo에 대입
memberInfo = new Member(memberId, memberPw1, memberName, memberAge);
return "회원 가입 성공!!";
} else { // 일치하지 않는 경우
return "회원 가입 실패!!(비밀번호 불일치)";
}
}
public String login() {
System.out.println("******** 로그인 ********");
// 회원 가입을 했는지 부터 확인
// == memberInfo가 객체를 참고하고 있는지 확인
if(memberInfo == null) {// 회원가입을 먼저 안 한 경우
// null : 아무것도 참조하고 있지 않음
return "회원 가입부터 진행해주세요.";
} else {
System.out.print("아이디 : ");
String memberId = sc.next();
System.out.print("비밀번호 : ");
String memberPw = sc.next();
// 회원 가입 정보에서
// 저장된 아이디, 비밀번호가
// 입력된 아이디, 비밀번호와 같으면 "로그인 성공"
// 아니면 "아이디 또는 비밀번호가 일치하지 않습니다"
if(memberId.equals(memberInfo.getMemberId())
&& memberPw.equals(memberInfo.getMemberPw())) {
loginMember = memberInfo;
// 참조형 Member 객체 주소(얕은 복사)
// 회원 가입 정보를 loginMember에 대입하여
// 어떤 회원이 로그인 했는지 구분할 수 있게 함
return loginMember.getMemberName() + "님 환영합니다";
} else {
return "아이디 또는 비밀번호가 일치하지 않습니다";
}
}
}
public String selectMember(){
System.out.println("******** 회원 정보 조회 ********");
// 1) 로그인 여부 확인 -> 필드 loginMember가 참조하는 객체가 있는지 확인
if(loginMember == null){
// loginMember가 참조하는 객체가 없을 경우(null)
return "로그인 후 해주세요";
// return 구문이 수행되면 해당 메소드는 즉시 종료되고
// 호출한 곳으로 돌아감
}
// 2) 로그인이 되어있는 경우
// 회원 정보를 출력할 문자열을 만들어서 반환(return)
// (단, 비밀번호 제외)
// 이름 : 유저일
// 아이디 : user01
// 나이 : 35세
// return 여러 개 못 만듦
String str = "이름 : " + loginMember.getMemberName();
//String edu.kh.oop.method.model.vo.Member.getMemberName()
//반환형 메소드 코드 위치
str += "\n아이디 : " + loginMember.getMemberId();
str += "\n나이 : " + loginMember.getMemberAge() + "세";
return str;
}
public String updateMember() {
System.out.println("\n******** 회원 정보 수정 ********");
if(loginMember==null){ // 로그인이 안될 때
return "로그인 후 해주세요";
} // 로그인이 될 때
System.out.print("비밀번호 확인 : ");
String inputPw = sc.next();
if(inputPw.equals(loginMember.getMemberPw())) { // 입력한 비밀번호랑 실제 비밀번호가 같으면
System.out.print("수정하고 싶은 아이디 : ");
String inputId = sc.next();
System.out.print("수정하고 싶은 이름 : ");
String inputName = sc.next();
System.out.print("수정하고 싶은 나이 : ");
int inputAge = sc.nextInt();
loginMember.setMemberId(inputId);
loginMember.setMemberName(inputName);
loginMember.setMemberAge(inputAge);
String str = "아이디 : " + inputId + "으로 수정되었습니다";
str += "\n이름 : " + inputName + "으로 수정되었습니다";
str += "\n나이 : " + inputAge + "세로 수정되었습니다";
return str;
}
return "비밀번호가 틀립니다. 다시 입력해주세요";
}
}
💫 class MemberService + update 선생님 코드
회원가입, 로그인, 회원 정보 조회, 회원 정보 수정, 프로그램 종료
package edu.kh.oop.method.model.service;
import java.util.Scanner;
import edu.kh.oop.method.model.vo.Member;
public class MemberService { // 클래스
// public MemberService(int a) {}
// 속성(필드)
private Scanner sc = new Scanner(System.in);
// System.in : 자바에서 기본적으로 지정해둔 입력 장치(키보드)
private Member memberInfo = null; // 회원가입 : 가입한 회원의 정보를 저장할 변수
private Member loginMember = null; // 로그인 : 로그인한 회원의 정보를 저장할 변수
// 기능(생성자, 메소드)
public MemberService() {} // 기본 생성자
// ** 메소드 작성법 **
// [접근제한자] [예약어] 반환형 메소드명([매개변수]){}
// public static 기본자료형
// protected final 참조형(배열, 클래스)
// (dafault) abstract void
// private static final
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 사용
switch(menuNum) {
case 1 : System.out.println(signUp()); break;
case 2 : System.out.println(login()); break;
case 3 : System.out.println(selectMember()); break;
// case 4 : System.out.println(UpdateMember()); break;
case 4 :
int result = updateMember_teacher(); // 회원 정보 수정 메소드 수행 후
// 반환되는 결과를 result 변수에 저장
if(result == -1) {
System.out.println("로그인 후 이용해주세요");
} else if(result == 1) {
System.out.println("회원 정보가 수정되었습니다");
} else { // result == 0
System.out.println("회원 정보 수정 실패(비밀번호 불일치)");
}
break;
case 0 : System.out.println("프로그램을 종료합니다"); break;
default : System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
}
} while(menuNum !=0);
}
// 회원 가입 기능
public String signUp() {
// void는 반환형인데, 해당 메소드가 끝나고 호출한 곳으로 돌아갈 때 반환할 값이 없다
// String : String 자료형 값을 가지고 돌아간디
// 같은 클래스 내부에 있는 필드, 메소드는 이름만 불러도 호출 가능!
System.out.println("\n********* 회원 가입 ***********");
System.out.print("아이디 : ");
String memberId = sc.next();
System.out.print("비밀번호 : ");
String memberPw1 = sc.next();
System.out.print("비밀번호 확인 : ");
String memberPw2 = sc.next();
System.out.print("이름 : ");
String memberName = sc.next();
System.out.print("나이 : ");
int memberAge = sc.nextInt();
// 비밀번호, 비밀번호 확인이 일치하면 회원가입
// 일치하지 않으면 회원가입 실패
if(memberPw1.equals(memberPw2)) { // 일치하는 경우
// 입력 받은 정보를 이용해서 Member 객체를 생성한 후
// 자바에서의 객체는 new연산자이기에 new 사용
// new Member(memberId, memberPw1, memberName, memberAge);
// 생성된 객체의 주소를 필드에 있는 memberInfo에 대입
memberInfo = new Member(memberId, memberPw1, memberName, memberAge);
return "회원 가입 성공!!";
} else { // 일치하지 않는 경우
return "회원 가입 실패!!(비밀번호 불일치)";
}
}
public String login() {
System.out.println("******** 로그인 ********");
// 회원 가입을 했는지 부터 확인
// == memberInfo가 객체를 참고하고 있는지 확인
if(memberInfo == null) {// 회원가입을 먼저 안 한 경우
// null : 아무것도 참조하고 있지 않음
return "회원 가입부터 진행해주세요.";
} else {
System.out.print("아이디 : ");
String memberId = sc.next();
System.out.print("비밀번호 : ");
String memberPw = sc.next();
// 회원 가입 정보에서
// 저장된 아이디, 비밀번호가
// 입력된 아이디, 비밀번호와 같으면 "로그인 성공"
// 아니면 "아이디 또는 비밀번호가 일치하지 않습니다"
if(memberId.equals(memberInfo.getMemberId())
&& memberPw.equals(memberInfo.getMemberPw())) {
loginMember = memberInfo;
// 참조형 Member 객체 주소(얕은 복사)
// 회원 가입 정보를 loginMember에 대입하여
// 어떤 회원이 로그인 했는지 구분할 수 있게 함
return loginMember.getMemberName() + "님 환영합니다";
} else {
return "아이디 또는 비밀번호가 일치하지 않습니다";
}
}
}
public String selectMember(){
System.out.println("******** 회원 정보 조회 ********");
// 1) 로그인 여부 확인 -> 필드 loginMember가 참조하는 객체가 있는지 확인
if(loginMember == null){
// loginMember가 참조하는 객체가 없을 경우(null)
return "로그인 후 해주세요";
// return 구문이 수행되면 해당 메소드는 즉시 종료되고
// 호출한 곳으로 돌아감
}
// 2) 로그인이 되어있는 경우
// 회원 정보를 출력할 문자열을 만들어서 반환(return)
// (단, 비밀번호 제외)
// 이름 : 유저일
// 아이디 : user01
// 나이 : 35세
// return 여러 개 못 만듦
String str = "이름 : " + loginMember.getMemberName();
//String edu.kh.oop.method.model.vo.Member.getMemberName()
//반환형 메소드 코드 위치
str += "\n아이디 : " + loginMember.getMemberId();
str += "\n나이 : " + loginMember.getMemberAge() + "세";
return str;
}
/*
public String updateMember() {
System.out.println("\n******** 회원 정보 수정 ********");
if(loginMember==null){ // 로그인이 안될 때
return "로그인 후 해주세요";
} // 로그인이 될 때
System.out.print("비밀번호 확인 : ");
String inputPw = sc.next();
if(inputPw.equals(loginMember.getMemberPw())) { // 입력한 비밀번호랑 실제 비밀번호가 같으면
System.out.print("수정하고 싶은 아이디 : ");
String inputId = sc.next();
System.out.print("수정하고 싶은 이름 : ");
String inputName = sc.next();
System.out.print("수정하고 싶은 나이 : ");
int inputAge = sc.nextInt();
loginMember.setMemberId(inputId);
loginMember.setMemberName(inputName);
loginMember.setMemberAge(inputAge);
String str = "아이디 : " + inputId + "으로 수정되었습니다";
str += "\n이름 : " + inputName + "으로 수정되었습니다";
str += "\n나이 : " + inputAge + "세로 수정되었습니다";
return str;
}
return "비밀번호가 틀립니다. 다시 입력해주세요";
} */
public int updateMember_teacher() {
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();
// 3) 비밀번호를 입력 받아서
// 로그인한 회원의 비밀번호와 일치하는지 확인
System.out.print("비밀번호를 입력 : ");
String inputPw = sc.next();
if(inputPw.equals(loginMember.getMemberPw())) {
// 4) 비밀번호가 같을 경우
// 로그인한 회원의 이름, 나이 정보를 입력 받은 값으로 변경 후
// 1 반환
loginMember.setMemberName(inputName);
// 입력 받은 inputName을
// loginMember가 참조하는 Member객체의 필드 memberName에 대입
loginMember.setMemberAge(inputAge);
return 1;
} else {
// 5) 비밀번호가 다를 경우 0 반환
return 0;
}
}
}
class 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();
// MemeberService의 기본 생성자가 작성되어 있지 않지만
// 문제없이 사용 가능
// 왜? 컴파일러가 코드를 번역할 때
// 클래스 내부에 생성자가 하나도 없다면
// 자동으로 기본 생성자를 추가해줌
// (주의) 생성자가 하나라도 있으면 자동 생성 안 해줌!
// The constructor MemberService() is undefined
service.displayMenu();
}
}
class 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() {
// get + 필드명
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public int getMemberAge() {
return memberAge;
}
public void setMemberAge(int memberAge) {
this.memberAge = memberAge;
}
}