메소드

메소드 선언은 선언부와 실행 블록으로 구성

메소드 선언부를 메소드 시그너처라고 함

메소드 선언은 선언부( 리턴타입, 메소드 이름, 매개 변수 선언 ) 실행 블록 구성 

 

리턴 타입

리턴값이란 메소드를 실행한 후의 결과값

메소드는 리턴값이 있을 수도 있고 없을 수도 있으나 리턴값이 있을 경우 리턴 타입이 선언부에 명시

리턴값이 없는 메소드는 리턴 타입에 void 기술

리턴값이 있는 메소드는 리턴값의 타입을 기술

클래쓰
void powerOn() {...};
double divide( int x, int y ) {...};

메인 ( 호출 ) 
powerOn(); // 매개변수 필요x
double result = divide( 10, 20 ); // 매개변수 필요O
int result = divide( 10, 29 ) // 컴파일 에러 int -> double로 변경해야 됨

 

메소드 이름

숫자로 시작 x, 관례적으로 메소드 이름은 소문자, 다른 단어 혼합시 뒤이어 오는 단어 첫 글자 대문자

잘 작성된 메소드 이름
void run(){...};
void startEngine(){...};
String getName(){...};
int[] getScores(){...};

 

매개 변수 선언

매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용

매개 변수가 있는 divide() 메소드 선언
double divide( int x, int y ) {...};

매개 변수가 있는 divide() 메소드 호출
double result = divide ( 10, 20 );
//선언과 동일하게 매개 변수 값을 2개면 2개를 호출

double result = divide ( 10.5, 20.0 ); // 에러
10.5와 20.0은 double 값이므로 int 타입으로 변환 불가라 에러

byte b1 = 10;
byte b2 = 20;
double result = divide ( b1, b2 );
byte는 int로 자동 타입 변환되기 때문에 컴파일 에러 안남

 

 

클래스 ( 메소드 선언 ) 
package sec02.exam03;

public class Calculator {
	// 필드
	int x;
	int y;
	
	//생성자
	Calculator(int x, int y) { //지역변수
		this.x = x;
		this.y = y;
	}
	

	void powerOn() {
		System.out.println("전원을 켭니다.");
	}
	int plus() { 
		
		return x + y; //인스턴스변수
	}
	double divide() { //지역변수
		double result = (double)x / (double)y;
		return result;
	}
	
	// 필드값 초기화
	void setX(int x) {
		this.x = x;
	}
	void setY(int y) {
		this.y = y;
	}
	
	int getX() {
		return x;
	}
	// x,y 값을 읽어옴
	int getY() {
		return y;
	}
	
	
	void powerOff() {
		System.out.println("전원을 끕니다.");
	}
}

main( 메소드 호출 ) 
package sec02.exam03;

public class CalculatorExample {

	public static void main(String[] args) {
		Calculator myCalc = new Calculator(5, 6);
		myCalc.powerOn();
		
		int result1 = myCalc.plus();
		System.out.println("result1=" + result1);
		
//		byte x = 10;
//		byte y = 4;
//		double result2 = myCalc.divide(x, y);
		
		myCalc.x = 10;
		myCalc.y = 3;
		double result2 = myCalc.divide();
		System.out.println("result2=" + result2);
		
		myCalc.setX(10);
		myCalc.setY(3);
		double result3 = myCalc.divide();
		System.out.println("x= " + myCalc.getX());
		System.out.println("y= " + myCalc.getY());
		
		myCalc.powerOff();
	}

}

 

매개 변수의 개수를 모를 경우

메소드의 매개 변수는 개수가 이미 정해져 있는 것이 일반적이지만,

어떤 상황에서는 메서드를 선언 할 때 매개 변수의 개수를 알 수 없는 경우도 존재

예를 들어 여러 개의 수를 모두 합산하는 메소드를 선언해야 한다면 몇 개의 매개 변수가

입력될지 알 수 없기 때문에 매개 변수의 개수를 결정 할 수 없을 것이다.

해결책은 매개 변수를 배열 타입으로 선언하는 것

매개 변수를 배열 타입으로 선언
int sum1(int [] values){ }
sum1() 메소드를 호출할 때 배열을 넘겨줌으로써 배열의 항목 값들을 모두 전달 가능
배열의 항목 수는 호출할 때 결정하면 됨 
int[] values = {1, 2, 3};
int result = sum1(values);
int result = sum1(new int[](1,2,3,4,5));

매개 변수를 배열 타입으로 선언하면 메소드를 호출하기 전에 배열을 생성해야 하는 불편한 점이 있음

클래스 선언
package sec02.exam03;

public class Computer {
	//// 매개 변수의 개수를 모를 경우 ( 선언 )
	int sum1(int[] values) {
		int sum = 0;
		for(int i=0; i<values.length; i++) {
			sum += values[i];
		}
		return sum;
	}
	
	int sum2(int ... values) {
		int sum = 0;
		for(int i=0; i<values.length; i++) {
			sum += values[i];
		}
		return sum;
	}
}
maint ( 호출 ) 
package sec02.exam03;

import java.security.PublicKey;

public class ComputerExample {

	public static void main(String[] args) {
		// 매개 변수의 개수를 모를 경우 ( 호출 )
		
		Computer myCom = new Computer();
		
		int[] values1 = {1, 2, 3};
		int[] arr = new int[]{1, 2, 3};
		
		int[] arr2 = new int[3];
		arr[0] = 1; arr[1] = 2; arr[2] = 3;
				
		int result1 = myCom.sum1(values1);
		System.out.println("result1 = " + result1);
		
		int result2 = myCom.sum1(new int[] {1,2,3,4,5});
		System.out.println("result2 =" + result2);
		
		int result3 = myCom.sum2(1, 2, 3);
		System.out.println("result = " + result3);
		
		int result4 = myCom.sum2(1, 2, 3, 4, 5);
		System.out.println("result4 = " + result4);
	}

}

 

실습

Student 클래스 활용 배열에 학생수 입력 후 국어, 영어, 수학 출력 ( main 출력 )

package sec04.exam02;

import java.util.Scanner;

public class StuEx {
	public static void main(String[] args) {
		boolean run = true;
		int korTot = 0;
		int engTot = 0;
		int mathTot = 0;
		double avgTot = 0.0;
		int korMax = 0;
		int engMax = 0;
		int mathMax = 0;
		String kMaxName = null;
		String eMaxName = null;
		String mMaxName = null;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("학생 수>");
		int num = Integer.parseInt(scanner.nextLine());
		Student[] students = new Student[num];
		for (int i=0; i <students.length; i++) {
			System.out.print("이름>");
			String name = scanner.nextLine();
			System.out.print("국어>");
			int kor = Integer.parseInt(scanner.nextLine());
			System.out.print("영어>");
			int eng = Integer.parseInt(scanner.nextLine());
			System.out.print("수학>");
			int math = Integer.parseInt(scanner.nextLine());
			korTot += kor;
			engTot += eng;
			mathTot += math;
			students[i] = new Student(name, kor, eng, math);
			if (korMax < students[i].kor) {
				korMax = kor;
				kMaxName = students[i].name;
			}
			if (engMax < students[i].eng) {
				engMax = eng;
				eMaxName = students[i].name;
			}
			if (mathMax < students[i].math) {
				mathMax = math;
				mMaxName = students[i].name;
			}
			
		}
		while (run) {
			System.out.println("---------------------------------------------");
			System.out.println(" 1. 점수리스트 | 2. 분석 | 3. 종료");
			System.out.println("---------------------------------------------");
			System.out.print("선택>");
			
			int selectNo = Integer.parseInt(scanner.nextLine());
			switch(selectNo) {
			case 1:
				System.out.println("\t국어\t영어\t수학");
				System.out.println("------------------------------------------");
				for (Student st : students) {
					System.out.printf("%s\t%d\t%d\t%d\t총점:%d\t평균:%f\n"
							,st.name,st.kor,st.eng,st.math, st.getTotal(), st.getAvg());
				}
				System.out.println("------------------------------------------");
				System.out.printf("총점:\t%d\t%d\t%d\n", korTot, engTot, mathTot);
				break;
			case 2:
				System.out.println("프로그램 분석");
				System.out.printf("국어 최고 점수: %d %s\n",korMax, kMaxName);
				System.out.printf("영어 최고 점수: %d %s\n",engMax, eMaxName);
				System.out.printf("수학 최고 점수: %d %s\n",mathMax, mMaxName);
				break;
			case 3:
				run = false;
				System.out.println("프로그램 종료");
			}
		}
		
		
		
		
		
	}

}

 

Student 클래스 활용 배열에 학생수 입력 후 국어, 영어, 수학 출력 ( class 값 선언)

package sec04.exam02;

public class Student {
	String name;
	int kor, eng, math;
	Student(String name, int kor, int eng, int math) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	int getTotal() {
		//System.out.println(kor+eng+math);
		return kor+eng+math;
	}
	double getAvg() {
		return getTotal() / 3.0;
	}
	void printResult() {
		System.out.println("이름:" + name);
		System.out.println("국어:" + kor);
		System.out.println("영어:" + eng);
		System.out.println("수학:" + math);
		System.out.println("총점:" + getTotal());
		System.out.println("평균:" + getAvg());
	}

}

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-31 11일차  (0) 2023.05.31
2023-05-30 10일차  (0) 2023.05.30
2023-05-25 8일차  (0) 2023.05.25
2023-05-24 7일차  (2) 2023.05.24
2023-05-23 6일차  (0) 2023.05.23

+ Recent posts