Java 코드연습

[뉴렉처] 매개변수를 이용한 함수 고립화

양상추상츄 2021. 10. 18. 01:52

기존코드에서 전역변수를 매개변수로 변경시켜 함수를 외부로부터 영향받지 않도록함

package test;

import java.util.Scanner;

public class Program {
	
	static int size = 3;
	static int[] kors = new int[size];
	static Scanner scan = new Scanner(System.in);
	
	
	public static void main(String[] args) {
		
		int menu = 0; // 1.INPUT 2.PRINT 3.EXIT
		final int MENU_INPUT = 1; // 상수
		final int MENU_PRINT = 2; // 상수
		final int MENU_EXIT = 3; // 상수
		boolean loop = true;
		
		//메뉴
		while(loop){
			System.out.println("\t1.성적입력");
			System.out.println("\t2.성적출력");
			System.out.println("\t3.종료");
			System.out.print("\t>>>");
			
			menu = scan.nextInt();
			
			switch(menu) {
			
			case MENU_INPUT://1
				gradeEnter();
				
			case MENU_PRINT://2
				gradeOutput();
			
			case MENU_EXIT://3
				//EXIT
				break;
			
			default:
				System.out.println("입력오류 : 1에서 3까지만 입력 할 수 있습니다.");
				
			}
			
			System.out.println("good bye~");
			break;
		}
		
	}
	
	//성적입력--------------------------------------
	static void gradeEnter() {
		
		// 점수 초기화
		for(int i=0; i<size; i++) { 
			kors[i] = 0;
		}
		
		System.out.println("------------------------------------");
		System.out.println("@@@@@@@@@@@@@성적입력@@@@@@@@@@@@@@@@");
		for(int i=0; i<size; i++){
			do{
				System.out.printf("국어%d : ",i+1);
				kors[i]=scan.nextInt();//점수입력
				
				if(kors[i]<0||100<kors[i]) {
					System.out.println("성적범위를 벗어났습니다.");
				}
			}while(kors[i]<0||100<kors[i]); // 점수 범위를 벗어날 경우 false, 위의 내용 다시 반복		
		}
	}
	
	//성적출력--------------------------------------
	static void gradeOutput() {
		int total;
		float avg;
		
		total = kors[0] + kors[1] + kors[2];
		avg = total / 3.0f;
		
		System.out.println("------------------------------------");
		System.out.println("@@@@@@@@@@@@@성적출력@@@@@@@@@@@@@@@@");
		for(int i=0; i<size; i++) {
			System.out.printf("\t국어%d: %3d\n", i+1, kors[i]);// \t 탭, %3d 3칸 정렬, \n 한칸내리기
		}
		
		System.out.printf("\t총점: %3d\n", total); // 3칸 정렬
		System.out.printf("\t평균: %6.2f\n", avg); // 소수점 2자리 까지 나오고 6칸 정렬
		System.out.println("------------------------------------");
		
	}

}

 

전역변수 kors 배열 변수를 메소드 매개변수로 변경함

package test;

import java.util.Scanner;

public class Program {
	
	static int size = 3;
	static Scanner scan = new Scanner(System.in);	
	
	public static void main(String[] args) {
		
		int[] korsList = new int[size];
		
		int menu = 0; // 1.INPUT 2.PRINT 3.EXIT
		final int MENU_INPUT = 1; // 상수
		final int MENU_PRINT = 2; // 상수
		final int MENU_EXIT = 3; // 상수
		boolean loop = true;
		
		//메뉴
		while(loop){
			System.out.println("\t1.성적입력");
			System.out.println("\t2.성적출력");
			System.out.println("\t3.종료");
			System.out.print("\t>>>");
			
			menu = scan.nextInt();
			
			switch(menu) {
			
			case MENU_INPUT://1
				gradeEnter(korsList); // korsList배열을 매개변수로 받음
				
			case MENU_PRINT://2
				gradeOutput(korsList);// korsList배열을 매개변수로 받음
			
			case MENU_EXIT://3
				//EXIT
				break;
			
			default:
				System.out.println("입력오류 : 1에서 3까지만 입력 할 수 있습니다.");
				
			}
			
			System.out.println("good bye~");
			break;
		}
		
	}
	
	//성적입력--------------------------------------
	static void gradeEnter(int[] kors) {//매개변수는 지역에서는 마음대로 설정 가능
										//kors == korsList 배열임
		int kor;
		
		// 점수 초기화
		for(int i=0; i<size; i++) { 
			kors[i] = 0;
		}
		
		System.out.println("------------------------------------");
		System.out.println("@@@@@@@@@@@@@성적입력@@@@@@@@@@@@@@@@");
		for(int i=0; i<size; i++){
			do{
				System.out.printf("국어%d : ",i+1);
				kor=scan.nextInt();//점수입력
				
				if(kor<0||100<kor) {
					System.out.println("성적범위를 벗어났습니다.");
				}
			}while(kor<0||100<kor); // 점수 범위를 벗어날 경우 false, 위의 내용 다시 반복
			kors[i] = kor;
		}
	}
	
	//성적출력--------------------------------------
	static void gradeOutput(int[] kors) {
		int total;
		float avg;
		
		total = kors[0] + kors[1] + kors[2];
		avg = total / 3.0f;
		
		System.out.println("------------------------------------");
		System.out.println("@@@@@@@@@@@@@성적출력@@@@@@@@@@@@@@@@");
		for(int i=0; i<size; i++) {
			System.out.printf("\t국어%d: %3d\n", i+1, kors[i]);// \t 탭, %3d 3칸 정렬, \n 한칸내리기
		}
		
		System.out.printf("\t총점: %3d\n", total); // 3칸 정렬
		System.out.printf("\t평균: %6.2f\n", avg); // 소수점 2자리 까지 나오고 6칸 정렬
		System.out.println("------------------------------------");
		
	}

}

함수이름은 위와 같이 하는게 좋은데

나는 거꾸로 해놔서 다음부터는 위에 처럼 함수명을 지어야겠다.