[기능]
package method;
// class : 객체(속성, 기능)를 정의하는 문서 (=설계도)
public class Student {
/* 필드( == 멤버 변수) */
// 필드 1 - class변수(== static 변수)
// -> 클래스명.변수명 형태로 호출하기 때문에 class 변수
public static String schoolName = "KH대학교";
public static final int MIN_VALUE = 0; // 스킬역량 최소값
public static final int MAX_VALUE =100; // 스킬 역량 최대값
// 필드 2 - instance 변수
// -> new 연산자에 의해서 생성된 객체(instance)의 변수
private String name; // 이름
private String studentNumber; // 학번
private char gender; // 성별
private int java; // 자바 역량 점수
private int html; // html 역량 점수
/* 생성자 */
// - new 연산자에 의해 객체 생성 시 실행되는 메서드 (기능)
public Student() {} // 기본 생성자
// (오버로딩 적용)
// 매개 변수 생성자
public Student(String name, String studentNumber, char gender) {
this.name = name;
this.studentNumber = studentNumber;
this.gender = gender;
}
/* 메서드( == 멤버 메서드)*/
// getter / setter
/* 반환형 : 메서드 호출 시 반환되는 값의 자료형*/
public String getName() {
return name;
}
/* 매개 변수 : 메서드 호출 시 전달된 값을 저장하는 변수*/
public void setName(String name) {
this.name = name;
//this 참조 변수 : 생성된 객체 자체를 참조하는 변수(이 객체!)
// 반환형 void : return 옆에 반환할 값이 없다
// return; //-> 미작성 시 컴파일러가 자동 추가
// getter / setter 자동 완성 : alt + shift + s -> r
}
public String getstudentNumber() {
return studentNumber;
}
public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getHtml() {
return html;
}
public void setHtml(int html) {
this.html = html;
}
// 객체의 필드 값을 문자열로 반환하는 메서드
public String toString() {
// 240001 / 홍길동 / 남 / java : 80 / html : 70
// String String.format("패턴", 값)
// -> 패턴 형태의 문자열을 반환하는 메서드
//(printf와 비슷한데 printf는 출력,
// String.format()은 문자열 만들어서 반환)
return String.format("%s / %s / %c / java : %d / html : %d",
studentNumber, name, gender, java, html);
}
}
[실행]
package method;
// 실행용 클래스
public class StudentRun {
public static void main(String[] args) {
// StudentService 객체 생성
StudentService service = new StudentService();
service.mainMenu();
}
}
[기능 제공]
package method;
import java.util.Scanner;
// 기능 제공용 클래스
public class StudentService {
// 필드
private Scanner sc = new Scanner(System.in); // Scanner 객체 생성
/* 메인 메뉴 화면 */
public void mainMenu() {
int input = 0; // 입력 받은 메뉴 번호를 저장할 변수
// 생성된 학생 객체 주소를 저장할 참조 변수
// (null : 참조하는 객체가 없다, 주소 저장 X)
Student std = null;
// do ~ while : 최소 1회 이상 반복
do {
System.out.println("\n===== 학생 1명 관리 프로그램 ====");
System.out.println("1. 학생 등록");
System.out.println("2. 학생 정보 확인");
System.out.println("3. 학생 이름 수정");
System.out.println("4. Java 공부하기");
System.out.println("5. Html 공부하기");
System.out.println("0. 프로그램 종료");
System.out.print("메뉴 번호 입력 : ");
input = sc.nextInt();
sc.nextLine(); // 입력 버퍼에 남아있는 엔터 제거
System.out.println(); // 줄바꿈
switch(input) {
case 1:
std = registStudent();
System.out.println(std.getName() + "학생 등록됨!!");
break;
case 2:
System.out.println("[학생 정보 확인]");
// static은 클래스명을 붙여서 호출!!
System.out.println("학교 : " + Student.schoolName);
System.out.println(std.toString());
break;
case 3:
// 학생 이름 수정 메서드 호출 시
// std에 저장된 학생 객체 참조 주소 전달(얕은 복사)
updateName(std);
break;
case 4:
studyJava(std);
break;
case 5: break;
case 0: System.out.println("=== 프로그램을 종료합니다...==="); break;
default: System.out.println("=== 알맞은 메뉴 번호를 입력해 주세요 ===");
}
}while(input != 0); // 메뉴 0 선택 시 반복 종료
}
/**
* 학생 등록 메서드
* @return 생성된 Student 객체의 주소 반환
*/
private Student registStudent() {
System.out.println("[학생 등록]");
System.out.print("이름 : ");
String name = sc.nextLine();
System.out.print("학번 : ");
String studentNumber = sc.nextLine();
System.out.print("성별(남/여) : ");
char gender = sc.next().charAt(0);
Student student = new Student(name, studentNumber, gender);
// student 변수에는
// 생성된 Student 객체를 참조하는 주소 값 담겨있다!!!
// -> 주소 값을 반환
// (== 주소 값이 복사되어 호출한 곳으로 돌아감)
return student;
}
/**
* 학생 이름 수정 메서드
* @parm std : 전달 받은 Student 객체 참조 주소
*/
private void updateName(Student std) {
System.out.println("[학생 이름 수정]");
System.out.println("기존 이름 : " + std.getName() );
System.out.print("변경할 이름 입력 : ");
String newName = sc.nextLine();
// 이름을 홍길동 -> 김철수로 변경 하시겠습니다?(y/n)?
System.out.printf("이름을 %s -> %s 로 변경 하시겠습니다?(y/n)? ",
std.getName(), newName);
// String.toUpperCase() -> 대문자로 변환
// String.toLowerCase() -> 소문자로 변환
char check = sc.next().toLowerCase().charAt(0);
if(check == 'n' ) { // 'n' 이 입력된 경우
System.out.println("=== 이름 변경 취소됨 ===");
return;
}
// 'y'가 입력 되었을 때
std.setName(newName); // 새로운 이름을 std가 참조하는 객체에 세팅
System.out.println("=== 이름 변경 완료!! ===");
}
/**
* 자바 공부 수행 -> std의 자바 역량 변경
* 단, 수정된 자바 역량은 최대값(100), 최소값(0) 범위 초과 불가
* @param std
*/
public void studyJava(Student std) {
System.out.println("[Java 공부하기]");
int before = std.getJava();
System.out.println("현재 Java 역량 점수 : " + std.getJava());
System.out.println("증가 또는 감소한 Java 역량 점수 입력 : ");
int score = sc.nextInt();
// 기존 점수에 누적 !
int temp = std.getJava() + score; // 기존 점수 + 입력된 점수
std.setJava(temp); // 참조하고 있는 학생 객체 Java 필드에 대입
// 100점(Student.MAX_VALUE) 초과 시 Student.MAX_VALUE 대입
if(temp > Student.MAX_VALUE) {
temp =Student.MAX_VALUE;
}
if (temp < Student.MIN_VALUE) {
temp = Student.MIN_VALUE;
}
std.setJava(temp); // 참조하고 있는 학생 객체 java 필드에 대입
System.out.println("=== Java 역량 점수 수정 완료 ===");
// 기존 변경 증감
// 50 -> 80 (+30)
// 50 -> 30 (-20)
// 90 -> 100 (+30) 최대값 초과
// 10 -> 0 (-40) 최소값 미만
// 음수인 경우 score
// 양수인 경우 +score
String str = (score <= 0 ) ? (score + "") : ("+" + score);
System.out.printf("%d -> %d (%s) \n", before, std.getJava(), str);
}
/** HTML 역량 검사
*
* @param std
*/
private void studyHtml(Student std) {
System.out.println("[Html 공부하기]");
int before = std.getHtml();
System.out.println("현재 Html 점수는 : " + std.getHtml());
System.out.print("증가 또는 감소한 Html 역량 점수 입력 : ");
int score =sc.nextInt();
int temp = std.getHtml() + score;
if(temp > Student.MAX_VALUE) {
temp = Student.MAX_VALUE;
}
if(temp < Student.MIN_VALUE) {
temp = Student.MIN_VALUE;
}
std.setHtml(temp);
System.out.println("=== Html 역량 점수 수정 완료 ===");
String str = (score <= 0) ? (score + "" ) : ("+" + score) ;
System.out.printf("%d -> %d (%s) \n", before, std.getHtml(), str);
}
}
#결과

=> 메뉴 번호 입력 시 아래와 같은 결과 출력
1. 학생 등록

2. 학생 정보 확인

3. 학생 이름 수정

4. Java 공부하기

5. HTML 공부하기

'BackEnd > Java' 카테고리의 다른 글
| [Java]반환형의 다형성(Polymorphism) (0) | 2024.07.30 |
|---|---|
| [Java]매개 변수의 다형성 (Polymorphism) (0) | 2024.07.30 |
| [Java]OOP Static (0) | 2024.07.23 |
| [Java]OOP_필드(Field) (1) | 2024.07.23 |
| [Java]OOP_클래스 (1) | 2024.07.23 |