메소드, getter, setter, return

oYJo·2024년 12월 17일

Java

목록 보기
17/25

메소드(Method)

  • 메소드?
    수학의 함수와 비슷하며 호출을 통해 사용, 전달 값이 없는 상태로 호출을 하거나 어떤 값을 전달하여 호출을 하며, 함수 내에 작성된 연산 수행
    수행 후 반환 값 / 결과 값은 있거나 없을 수 있음

  • 메소드 표현식
  • 메소드 접근제한자
  • 메소드 예약어
  • 메소드 반환형

  • 메소드 매개변수

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

  • 메소드 표현식 : 매개변수가 없고 리턴 값이 있을 때
  • 메소드 표현식 : 매개변수가 없고 리턴 값이 없을 때
  • 메소드 표현식 : 매개변수가 있고 리턴 값이 있을 때
  • 메소드 표현식 : 매개변수가 있고 리턴 값이 없을 때

getter 메소드

  • getter 메소드
    필드에 기록된 값을 읽어서 요청한 쪽으로 읽은 값을 넘기는 메소드

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

  • 표현식

setter 메소드

  • setter 메소드
    필드에 변경할 값을 전달 받아서 필드 값을 변경하는 메소드

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

  • 표현식

return

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

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;
	}
}
profile
Hello! My Name is oYJo

0개의 댓글