JAVA_07

김민영·2024년 2월 1일

JAVA

목록 보기
8/10
post-thumbnail

메서드(Method)

  1. 기능을 정의하는 단위 (예: 덧셈기능, 뺄셈기능 등등)
  2. 하나의 기능만을 정의하는 것이 좋음
  3. 자주 반복되는 내용을 정의해 놓고, 필요할 때 호출하여 사용함

형식)

[접근제한] 반환형 메서드이름(매개변수 혹은 인자){
		메서드 호출 시 실행될 문장;
}
  • 접근제한 : public > protested > default > private
    (클래스, 메서드, 변수 앞에 사용이 됨)

  • 반환형

    • 메서드를 실행하고 특정 타입의 결과를 변환해 주겠다고
      선언하는 것을 반환형(리턴타입) 이라고 말함
    • 메서드에서 실행된 결과값을 돌려주는 자료형으로 생략이 불가능
    • 해당 메서드가 어떤 동작이나 기능을 실행한 후 결과를 알려주는 자료형
    • 만약 결과를 되돌려 줄 필요가 없는 경우에는 void라는 키워드를 작성
    • 변환형이 void인 경우를 제외하고 결과를 되돌려 주어야 할 때는
      메서드 명령문 맨 끝에 return 키워드 작성 후, 앞에서 선언한 변환형과 같은 자료형으로 결과를 되돌려 준다
  • 메서드 이름

    • 식별자, 소문자로 시작
    • 두 개의 단어가 결합된 경우에는 camelCase기법으로 작성
  • 매개변수

    • 외부에서 값을 넘겨 받는 변수, 생략 가능
    • 메서드 호출 시 전달되는 값을 저장을 위한 용도로 사용
    • 메서드 호출 시 전달되는 값의 자료형과 매개변수의 자료형은 반드시 일치해야 함
  • 메서드 실행문

    • 해당 메서드가 호출된 경우에만 실행이 됨
public class MethodExam_01 {
	
	public static void message(){
		System.out.println("방가방ㄱ~");
	}
	
	public static void input() {
		Scanner sc = new Scanner(System.in);
		int arr[] = new int[3];
		
		for(int i = 0; i<arr.length; i++) {
			System.out.print((i+1)+"번째 번호 입력: ");
			arr[i]=sc.nextInt();
		}
		
		for(int i = 0; i<arr.length; i++) {
			
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		sc.close();
	}

	public static void main(String[] args) {
		System.out.println("프로그램 시작");
		
		message(); // 메서드 호출
		
		System.out.println("프로그램 종료");
		
		System.out.println();
		
		input();
	
	} // main() 메서드 end
	

}

[문제1] 1 ~ 100까지의 홀수의 합과 짝수의 합을 구하는 메서드를 만들고, 호출하여 결과 출력

public class MethodExam_02 {
	
	public static void sum() {
		
		int evensum = 0, oddsum =0;
		for(int i = 0; i<=100; i++) {
			
			if (i %2 == 1) {
				oddsum+=i;
			}else {
				evensum+=i;
			}
		}
		
		System.out.println("홀수의 합 " + oddsum);
		System.out.println("짝수의 합 " + evensum);
	}

	public static void main(String[] args) {
		sum();

	}

}

### 매개변수가 있는 메서드 정의

형식)

[접근제한] 변환형 메서드이름(type 변수1, type 변수2){
			메서드 호출 시 실행 문장;
		}
  • 실인수와 가인수
    • 실인수 : 매개변수에 전달할 실제 값 ==> 메서드 호출 시에 사용
    • 가인수 : 매개변수(가인수) ==> 메서드 정의
    • 실인수와 가인수는 반드시 type, 순서, 갯수가 일치해야 함 (중요)
public class MethodExam_03 {
	
	private static void add(int su1, int su2) {
		System.out.println(su1 + "+" + su2+ "=" + (su1+su2));
		
	}

	public static void main(String[] args) {
		add(150, 127); // 실인수
		
	}
}
import java.util.Scanner;

public class MethodExam_04 {

	private static void sum(int start, int end) { // 값만 받기에 변수명 아무거나 다 가능
		
		int sum = 0;
		
		for(int i = start; i <= end; i++) {
			sum+=i;
		}
		System.out.println(start + " ~ " + end + "까지의 합 >>> " + sum);
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("합을 구할 시작 정수 입력 : ");
		
		int startNo = sc.nextInt(); // 지역변수 - 해당 지역에서 사용되는 변수
		
		System.out.print("합을 구할 마지막 정수 입력 : ");
		
		int endNo = sc.nextInt();
		
		sum(startNo, endNo);
		
		sc.close();

	}


}

[문제2] 키보드로 입력 받은 수까지의 홀수의 합과 짝수의 합을 구하는 메서드를 만들고 메서드를 호출하여 처리 후 화면 출력

public class MethodExam_05 {

	private static void sum(int a) {
		
		int oddsum = 0, evensum=0;
		for (int i = 0; i<=a;i++) {
			if(i%2==1) {
				oddsum+=i;
			}else {
				evensum+=i;
			}
		}
		
		System.out.println("홀수 합 : "+oddsum);
		System.out.println("짝수 합 : "+evensum);
		
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 : ");
		
//		int max = sc.nextInt();
//		sum(max);
		
		sum(sc.nextInt());
		
		sc.close();
		
	}


}

콘솔 창에서 간단하게 계산하는 계산기

import java.util.Scanner;
public class MethodExam_06 {

	private static void plus(int su1, int su2) {
		
		System.out.println(su1+"+"+su2+"="+(su1+su2));
		
	}
	
	private static void m(int su1, int su2) {
		
		System.out.println(su1+"-"+su2+"="+(su1-su2));
		
	}
	private static void d(int su1, int su2) {
		
		System.out.println(su1+"*"+su2+"="+(su1*su2));
		
	}
	
	private static void n(int su1, int su2) {
		
		System.out.println(su1+"/"+su2+"="+(su1/su2));
		
	}
	private static void o(int su1, int su2) {
		
		System.out.println(su1+"%"+su2+"="+(su1%su2));
		
	}
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		// 1. 키보드로 두 개의 정수와 연산자를 입력 받자
		System.out.print("첫번째 정수 입력 : ");
		int su1 = sc.nextInt();
		
		System.out.print("두번째 정수 입력 : ");
		int su2 = sc.nextInt();
		
		System.out.print("연산자(+,-,*,/,%) 중 하나를 입력 : ");
		String op = sc.next();
		
		// 2. 연산자 변수에 입력된 연산기호를 가지고 해당 기호에 맞는 메서드 호출
		switch(op) {
		
			case "+":
				plus(su1,su2);
				break;
			case "-":
				m(su1,su2);
				break;
			case "*":
				d(su1,su2);
				break;
			case "/":
				n(su1,su2);
				break;
			case "%":				o(su1,su2);
				break;
			
		}
		
		sc.close();
		

	}


}

메서드 호출 방식 - 2가지

1. call by value 방식

  • 값을 전달하여 호출하는 방식
  • 매개변수가 자료기본형(int,double 등등) 사용

2. call by reference 방식

  • 주소값을 전달하여 호출하는 방식
  • 매개변수가 참조자료형(배열, 클래스) 사용
  • java에서 가장 많이 사용하는 방식 -중요
public class MethodExam_07 {

	private static void call(int num) { // 200값 저장
		
		num = 100;
		
		System.out.println("num >>> " + num);
		
	} // call()메서드 end
	
	public static void main(String[] args) {
		
		// 1. call by value 방식
		int num = 200;
		
		System.out.println("메서드 호출 전...");
		
		System.out.println("num >>> " + num);
		
		System.out.println();
		
		call(num);
		
		System.out.println("메서드 호출 후...");
		
		System.out.println("num >>> " + num);

	}


}

중요!!!

public class MethodExam_08 {
	
	public static void change(int[] array) {
		
		System.out.println("array >>> " + array);
		
		
		for(int i=0; i<array.length; i++) {
			
			array[i] = array[i]*10;
		}
	}

	public static void main(String[] args) {
		
		// 2. call by reference 방식
		int[] arr = new int[3];
		
		arr[0] = 10; arr[1]=20; arr[2] = 30;
		
		System.out.println("arr >>> " + arr);
		
		System.out.println("change() 메서드 호출 전");
		
		for(int i = 0; i<arr.length; i++) {
			
			System.out.println("arr["+i+"] >>> " + arr[i]);
			
		}
		
		System.out.println();
		
		change(arr);
		
		System.out.println("change() 메서드 호출 후");
		
		for(int i = 0; i<arr.length; i++) {
			
			System.out.println("arr["+i+"] >>> " + arr[i]);
			
		}

	}

}

// 메서드 호출 시 반환형에 대한 사용
public class MethodExam_09 {
	
	public static int method1() {
		
		return 178;
		
	}
	
	// 변수명이 반환되는 경우
	public static int method2(int su1,int su2) {
		
		int sum = (su1 * 2)+(su2*2);
		
		return sum;
		
	}
	
	// 수식이 반환되는 경우
	public static int method3(int su1,int su2) {
		
		return su1 * su2;
		
	}
	
	// 단순한 문자열을 반환하는 경우
	public static String method4() {
		
		return "세종대왕";
		
	}
	
	public static String method5(String str1, String str2) {
		
		String result = str1 + str2 +"만세";
		return result;
		
	}
	
	// 문자열 수식을 반환하는 경우
	public static String method6(String str1, String str2) {
		
		return str1 + str2;
		
	}

	public static void main(String[] args) {
		
		int su = method1();
		
		System.out.println("su >>> " + su);
		
		// 같은 결과값
		
		System.out.println("method1()메서드 호출 후 반환되는 값 >>> " + method1());
		
		System.out.println("method2()메서드 호출 후 반환되는 값 >>> " + method2(200,142));
		
		System.out.println("method3()메서드 호출 후 반환되는 값 >>> " + method3(200,142));
		
		System.out.println("method4()메서드 호출 후 반환되는 값 >>> " + method4());
		
		System.out.println("method5()메서드 호출 후 반환되는 값 >>> " + method5("대한", "민국"));
		
		System.out.println("method5()메서드 호출 후 반환되는 값 >>> " + method6("홍", "길동"));
		

	}

}

성적 처리 프로그램

  • main() 메서드에서는 키보드로 이름, 국어점수, 영어점수, 수학점수를 입력을 받고, 총점 메서드, 평균 메서드, 학점 메서드를 호출하여 성적을 처리한 후에 화면에 성적 결과 출력
import java.util.Scanner;
public class MethodExam_10 {
	
	// 총점을 구하는 메서드
	public static int total(int k, int e, int m) {
		return k + e + m;
	}
	
	// 평균을 구하는 메서드
	public static double average(int tot) {
		return tot/3.0;
	}
	
	// 학점을 구하는 메서드
	public static String hakjum(double avg) {
		String grade = ""; // String grade = null;
		if(avg >= 90) {
			grade = "A학점";
		}else if(avg >= 80) {
			grade = "B학점";
		}else if(avg >= 70) {
			grade = "C학점";
		}else if(avg >= 60) {
			grade = "D학점";
		}else {
			grade = "F학점";
		}
		return grade;
	}

	public static void main(String[] args) {
		
		// 1. 메인 메서드에서 이름, 국어점수, 영어점수, 수학점수를 키보드로 입력
		Scanner sc = new Scanner(System.in);
		
		System.out.print("학생 이름 : ");
		String name = sc.next();
		
		System.out.print("국어 점수 : ");
		int kor = sc.nextInt();
		
		System.out.print("영어 점수 : ");
		int eng = sc.nextInt();
		
		System.out.print("수학 점수 : ");
		int math = sc.nextInt();
		
		System.out.println();
		
		// 2. 총점 ==> 총점 메서드호출
		int sum = total(kor, eng, math);
		
		// 3. 평균 ==> 평균 메서드호출
		double avg = average(sum);
		
		// 4. 학점 ==> 학점 메서드호출
		String hakjum = hakjum(avg);
		
		// 5. 결과 출력
		System.out.println("이   름 : " + name);
		System.out.println("국어점수 : " + kor + "점");
		System.out.println("영국어점수 : " + eng + "점");
		System.out.println("수학점수 : " + math + "점");
		System.out.println("총   점 : " + sum + "점");
		System.out.printf("평   균 : %.2f점\n" ,avg);
		System.out.println("학   점 : " + hakjum);
		sc.close();

	}

}

무한반복 --> while문

import java.util.Scanner;

// 개인별 성적 처리 - 무한반복

public class MethodExam_11 {
	
	// 총점을 구하는 메서드
	public static int total(int k, int e, int m) {
		return k + e + m;
	}
	
	// 평균을 구하는 메서드
	public static double average(int tot) {
		return tot/3.0;
	}
	
	// 학점을 구하는 메서드
	public static String hakjum(double avg) {
		String grade = ""; // String grade = null;
		if(avg >= 90) {
			grade = "A학점";
		}else if(avg >= 80) {
			grade = "B학점";
		}else if(avg >= 70) {
			grade = "C학점";
		}else if(avg >= 60) {
			grade = "D학점";
		}else {
			grade = "F학점";
		}
		return grade;
	}


	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		while(true) {
			System.out.print("학생 이름 : ");
			String name = sc.next();
			
			System.out.print("국어 점수 : ");
			int kor = sc.nextInt();
			
			System.out.print("영어 점수 : ");
			int eng = sc.nextInt();
			
			System.out.print("수학 점수 : ");
			int math = sc.nextInt();
			
			System.out.println();
			
			// 2. 총점 ==> 총점 메서드호출
			int sum = total(kor, eng, math);
			
			// 3. 평균 ==> 평균 메서드호출
			double avg = average(sum);
			
			// 4. 학점 ==> 학점 메서드호출
			String hakjum = hakjum(avg);
			
			// 5. 결과 출력
			System.out.println("이   름 : " + name);
			System.out.println("국어점수 : " + kor + "점");
			System.out.println("영국어점수 : " + eng + "점");
			System.out.println("수학점수 : " + math + "점");
			System.out.println("총   점 : " + sum + "점");
			System.out.printf("평   균 : %.2f점\n" ,avg);
			System.out.println("학   점 : " + hakjum);
					
			System.out.println(":::::::::::::::::::::::::::::::::::::::::::::");
			System.out.println();
			
			// 계속 진해할지, 종료 할지 여부 확인
			
			System.out.print("계속 진행할까요 (Y: 계속 / N: 종료) : ");
			
			String res = sc.next();
			
			if(res.equalsIgnoreCase("N")) {
				// 대문자 소문자 구분 X
				// res.equals("N") -> 대소구분
				break;
			}
			
		}
		System.out.println("수고하셨습니다");
		sc.close();

	}

}
import java.util.Scanner;

public class MethodExam_12 {
	
	// 2과목 총점을 구하는 메소드
	public static int sum2(int k, int e) {
		return k+e;
	}
	// 3과목 총점을 구하는 메소드
	public static int sum3(int k, int e, int m) {
		return k+e+m;
	}
	// 4과목 총점을 구하는 메소드
	public static int sum4(int k, int e, int m, int j) {
		return k+e+m+j;
	}

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
			
		System.out.print("국어 점수 : ");
		int kor = sc.nextInt();
			
		System.out.print("영어 점수 : ");
		int eng = sc.nextInt();
			
		System.out.print("수학 점수 : ");
		int math = sc.nextInt();
			
		System.out.print("자바 점수 : ");
		int java = sc.nextInt();
			
		System.out.println();
			
		System.out.println("2과목 총점 >>> " + sum2(kor,eng));
		System.out.println("3과목 총점 >>> " + sum3(kor,eng,math));
		System.out.println("4과목 총점 >>> " + sum4(kor,eng,math,java));
		
		sc.close();
			
	}

}

메서드 다중정의 (Method Overloading)

  • 동일한 클래스에서 동일한 이름의 메서드가 여러 개 정의되는 자바 문법
  • 일관된 이름으로 정의할 수 있어서 개방자(사용자)에게 코드의 직관성 제공

[메서드 다증정의 규칙]

  1. 메서드 이름이 동일해야 함
  2. 매개변수의 갯수가 같은 경우에는 매개변수의 자료형이 달라야 함
    또는 매개변수의 갯수가 달라야 함
  3. 리턴타입(반환형)은 무관함

import java.util.Scanner;

public class MethodExam_13 {
	
	// 메서드이름은 같지만 메소드 갯수가 달라서 실행 가능
	
	// 2과목 총점을 구하는 메소드
	public static int sum(int k, int e) { 
		return k+e;
	}
	// 3과목 총점을 구하는 메소드
	public static int sum(int k, int e, int m) {
		return k+e+m;
	}
	// 4과목 총점을 구하는 메소드
	public static int sum(int k, int e, int m, int j) {
		return k+e+m+j;
	}
	
	

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("국어 점수 : ");
		int kor = sc.nextInt();
			
		System.out.print("영어 점수 : ");
		int eng = sc.nextInt();
			
		System.out.print("수학 점수 : ");
		int math = sc.nextInt();
			
		System.out.print("자바 점수 : ");
		int java = sc.nextInt();
			
		System.out.println();
			
		System.out.println("2과목 총점 >>> " + sum(kor,eng));
		System.out.println("3과목 총점 >>> " + sum(kor,eng,math));
		System.out.println("4과목 총점 >>> " + sum(kor,eng,math,java));
		
		sc.close();
			
	}

}

문제풀기

<처리조건>
1. 데이터구조 : 이름(String),학번(int),학과(String),전화번호(String)
2. 학생수 결정 : 키보드로 입력 받는다.
3. 메뉴 선택 : 다음 메뉴를 구성하여 프로그램을 관리한다.

<메뉴구성>
• 1. 학생등록 : 키보드로 학생정보 입력 -> 배열저장
• 2. 전체출력 : 등록학생 전체출력
• 3. 학생조회 : 학번 입력 -> 이름, 학번, 학과, 전화번호 출력
• 4. 정보수정 : 학번 입력 -> 학과와 전화번호 수정
• 5. 프로그램 종료 : 프로그램을 종료하시겠습니다?(y/n)
y입력-> 종료, n입력 -> 프로그램 반복

-> 위 5개의 메뉴는 별도의 메서드로 정의해 놓고, 메뉴 선택 시 해당 메서드가 호출되어 실행되도록 하시오.

import java.util.Scanner;

public class Exam_01 {
	
	public static void information(String[] name,int[] number,String[] major, String[] tel,Scanner sc) {
		
		System.out.println("학생 정보 입력");
		
		
		for(int i = 0; i<name.length; i++) {
			System.out.print("이름 : ");
			name[i]=sc.next();
			System.out.print("학번 : ");
			number[i]=sc.nextInt();
			System.out.print("학과 : ");
			major[i]=sc.next();
			System.out.print("번호 : ");
			tel[i]=sc.next();
			
			System.out.println();
			
		}
		
		
	}
	public static void print(String[] name,int[] number,String[] major, String[] tel) {
		for(int i = 0; i<name.length; i++) {
			System.out.print("이름 : " + name[i]+" \t");
			System.out.print("학번 : " + number[i]+" \t");
			System.out.print("전공 : " + major[i]+" \t");
			System.out.println("전화번호 : "+tel[i]);
			
			System.out.println();
		}
		
	}
	public static void search(String[] name,int[] number,String[] major, String[] tel, Scanner sc) {
		System.out.println("학생검색");
		System.out.print("학번 입력 : ");
		int number2 = sc.nextInt();
		for(int i = 0; i<name.length; i++) {
			
			if(number[i] == number2) {
				System.out.print("이름 : " + name[i]+" \t");
				System.out.print("학번 : " + number[i]+" \t");
				System.out.print("전공 : " + major[i]+" \t");
				System.out.println("전화번호 : "+tel[i]);	
			}
		}
		
		System.out.println();
		
	}
	public static void fix(String[] name,int[] number,String[] major, String[] tel,Scanner sc) {
		
		System.out.println("정보수정");
		System.out.print("학번 입력 : ");
		int number3 = sc.nextInt();
		
		for(int i = 0; i <name.length; i++) {
			if(number3 == number[i]) {
				System.out.print("학과 : ");
				major[i] = sc.next();
				System.out.print("번호 : ");
				tel[i] = sc.next();
			}
		}
		
		System.out.println();
		
	}
	
	private static String over(Scanner sc) {
		
		System.out.print("프로그램 종료 (Y / N) : ");
		
		String res = sc.next();
		
		System.out.println();
		
		return res;
		
	}

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("학생 수 입력 : ");
		
		String[] name = new String[sc.nextInt()];
		int[] number = new int[name.length];
		String[] major = new String[name.length];
		String[] tel = new String[name.length];
		
		while(true) {
			
			System.out.print("선택 : ");
			int menu = sc.nextInt();
			
			String res = "";
			
			if (menu==1) {
				information(name,number,major,tel,sc);
			} else if(menu == 2) {
				print(name,number,major,tel);
			}else if(menu == 3) {
				search(name,number,major,tel,sc);
			}else if(menu == 4) {
				fix(name,number,major,tel,sc);
			}else if(menu == 5) {
				res = over(sc);
			}
			
			if(res.equalsIgnoreCase("Y")){
				break;
			}
			
		}
		

	}

}
profile
나다

0개의 댓글