JAVA
함수 활용 : 코드 재사용성
함수 기능에 대한 설명
static : 정말 필요한 순산이 아니라면 사용 x
이유) 무거움, 메모리가 무거움
static == 객체와 무관하게, 프로그램에 종속되어있다
### 함수 제작 순서 ###
1.void 기능명() + 간단한 주석
2. main에서 코드 뜯어오기
3. return 잇나 살펴보기
4. 메서드 시그니쳐 변경
5. 주석 제대로 설명 작성하기
※ 코드에 제어문(continue, break, return, ...)이 존재할 때
>> 제어문은 main()에 위치해야만함
>> if문과 함께 사용될 가능성이 매우 높음
>> isXxx(), hasXxx()와 같은 boolean 반환 메서드로 변경
학생부 예제 참고
https://javaboiii.tistory.com/10
샘플 데이터 생성 함수
public static int sample(String[] datas) {
// 학생부 배열에 샘플 데이터를 저장해주고,
// 몇명이 저장되었는지 반환하는 함수
datas[0] = "티모";
datas[1] = "아리";
datas[2] = "모르가나";// 배열을 call by reference -> 반환 X
int cnt = 3; // 원시 타임 -> 반환 O
return cnt;
}
중복되고 재상용성이 높은 함수
// 중복되고 재상용성이 높은 코드들 함수화
public static boolean isFull(int cnt, String[] datas) {
// 더 이상 학생 데이터를 저잘할 수 없을 때
if(cnt >= datas.length) { // 학생 5명보다 더 추가한다면
System.out.println("더이상 데이터를 저장할수없습니다!");
return true;
}
return false;
}
public static boolean isEmpty(int cnt) {
// 아직 저장된 학생 데이터가 전혀 없을 때
if(cnt<=0) {
System.out.println("변경할 학생 데이터가 없습니다!");
return true;
}
return false;
}
public static String inputName(int cnt, String[] datas) {
// 사용자가 이름을 입력하면 그 이름값을 반환하는 함수
Scanner sc=new Scanner(System.in);
String name;
while(true) {
System.out.print("저장하고싶은 학생의 이름을 입력해주세요. >> ");
name=sc.next();
System.out.print("정말 "+name+"(으)로 하시겠습니까? (Y/N) >> ");
String answer=sc.next();
if(answer.equals("Y")) {
boolean flag=false;
for(int i=0;i<cnt;i++) {
if(name.equals(datas[i])) { // 이미 존재하는 이름이라면
flag=true;
System.out.println(name+"은(는) 이미 존재하는 이름입니다...");
}
}
if(!flag) {
break;
}
}
}
return name;
}
public static boolean isRight(int num, int cnt) {
// selecOne함수의 경계값 검사
if(1<=num && num <= cnt) {
return true;
}
return false;
}
// 학생 번호로 검색
// input : 학생부 데이터, 현재 저장된 학생의 수
// output : x (대체적으로 출력(select, read, R) 기능은 output이 없음)
public static int selectOne(String[] datas, int cnt) {
Scanner sc=new Scanner(System.in);
int num;
while(true) {
System.out.println("검색할 번호 입력 >>>");
num = sc.nextInt();
if(isRight(num,cnt)) {
break;
}
}
System.out.println(num+"번 학생은 "+datas[num-1]+"입니다");
return num;
}
isRight 와 selectOne을 나눈이유
isRight는 "입력한 수가 정상인지 체크"기능
selectOne 은 "학생 검색" 기능 이기때문
### 서로 비슷한 기능인데, 완벽히 동일하지는 않을 때 ###
1. 함수를 호출하고, 내부에서 1/2 번튼식으로 조정 ) 징크스 Q -> 혼자서 작성할 때
2. 같은 부분까지만 함수로 두고, 다른 부분은 함수화 X) 독뎀, 이펙트
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String[] datas = new String[5];
int cnt = sample(datas);
while(true) {
int menu = printMenu();
if(menu==0) {
System.out.println("프로그램이 종료됩니다.");
break;
}
else if(menu==1) {
if(isFull(cnt, datas)) {
continue;
}
String name = datas[cnt]=inputName(cnt, datas); // 학생 추가
cnt++; // 총학생수 증가
System.out.println(name+"이(가) 저장되었습니다!");
}
else if(menu==2) {
// 학생부 전체출력
if(isEmpty(cnt)) {
continue;
}
printStudents(datas, cnt);
}
else if(menu==3) { // 이름으로 검색
System.out.println("검색어 입력 >>");
String searchContent = sc.next(); // searchKeyword
boolean flag = false; // 검색결과가 없는 상태로 시작
// 학생부를 하나하나 확인하면서
System.out.println("===============");
for (int i = 0; i < cnt; i++) {
// 학생의 이름안에 검색어가 포함?
if(datas[i].contains(searchContent)) { //티모 안에 모가 있니?
System.out.println(datas[i]);
flag=true; // 검색 결과를 찾은 상태
}
}
if(!flag) { // 검색 결과가 없다면
System.out.println("검색결과가 없습니다");
}
System.out.println("===============");
}
else if(menu==4) { // 번호로 검색 => PK로 검색 == selectOne(getOne)
selectOne(datas, cnt);
}
else if(menu==5) {
if(isEmpty(cnt)) { //학생부 목록의 학생이 없다면
continue;
}
int num = selectOne(datas, cnt);
datas[num-1]=inputName(cnt, datas);
}
else { // 유효성 검사
System.out.println("제대로 입력해주세요~~");
}
}
}
아무것도 없을 때, 함수부터 제작하는 방법
>>
1. input, output을 고려해보고
2. 그에 맞는 메서드 시그니쳐 선언(정의)
3. 기능 구현
4. 변경사항 적용하기
알듯 말듯 함 아오
'javaboiii의 JAVA > JAVA 예제' 카테고리의 다른 글
JAVA - ArrayList, Map 예제 (0) | 2024.07.15 |
---|---|
JAVA - 인터페이스 예제 (0) | 2024.07.12 |
JAVA - 함수 예제 (0) | 2024.07.01 |
JAVA - [제어문] 학생부 프로그램 (0) | 2024.06.28 |
JAVA - 이중for문(중첩 반복문) 예제 (0) | 2024.06.27 |