// 메소드의 선언부
접근제한자 반환타입 메소드명 (타입 매개변수명1, 타입 매개변수명2 ... ) {
// 메소드의 구현부
실행문1;
실행문2;
실행문3;
}
접근제한자
반환타입
메소드 이름
매개변수타입과 매개변수명
return;
return 값;
메소드의 유형은 매개변수와 반환값의 유무에 따라 4개의 유형으로 나눌 수 있다.
매개변수 X, 반환값 X
public void test1() { ... }
매개변수 X, 반환값 O
public 반환타입 test2() { ... }
매개변수 O, 반환값 X
public void test3(매개변수타입 매개변수명) { ... }
매개변수 O, 반환값 O
public 반환타입 test4(매개변수타입 매개변수명) { ... }
학생 정보를 정의한 클래스다. 위에서 언급한 네 가지 유형의 메소드를 정의했다.
public class Student {
// Student클래스의 필드
String name;
int korScore;
int engScore;
int mathScore;
// 학생 정보를 전달받아 멤버변수에 대입하는 메소드
public void setStudent(String studentName, int studentKorScore, int studentEngScore, int studentMathScore) {
name = studentName;
korScore = studentKorScore;
engScore = studentEngScore;
mathScore = studentMathScore;
}
// 학생의 평균을 반환하는 메소드
public double getAverage() {
double average = (korScore + engScore + mathScore)/3.0;
return average;
}
// 학생 평균을 전달받아 합격여부를 반환하는 메소드
public boolean processScore(double studentAverage) {
boolean isPassed = studentAverage >= 60;
return isPassed;
}
// 학생 정보를 출력하는 메소드
public void display() {
System.out.println("이름: " + name);
System.out.println("국어점수: " + korScore);
System.out.println("영어점수: " + engScore);
System.out.println("수학점수: " + mathScore);
}
}
학생 정보를 다루는 클래스로부터 객체를 생성하고 인스턴스 변수에 값을 대입하고 메소드를 이용한다.
public class StudentApp {
public static void main(String[] args) {
// 키보드로 값을 입력할 수 있는 기능이 있는 객체 생성
KeyboardReader keyboardReader = new KeyboardReader();
// Student객체 생성
Student student = new Student();
// 학생정보를 입력하고 생성된 객체의 인스턴스 변수에 대입한다.
System.out.println("학생정보를 입력하세요.");
System.out.print("이름 : ");
String studentName = keyboardReader.getString();
System.out.print("국어점수 : ");
int studentKorScore = keyboardReader.getInt();
System.out.print("영어점수 : ");
int studentEngScore = keyboardReader.getInt();
System.out.print("수학점수 : ");
int studentMathScore = keyboardReader.getInt();
student.setStudent(studentName, studentKorScore, studentEngScore, studentMathScore);
System.out.println();
// 객체의 인스턴스 변수를 이용하여 평균점수를 계산하고 반환한다.
// 반환받은 평균점수를 출력한다.
double studentAverage = student.getAverage();
System.out.println("평균점수: " + studentAverage);
System.out.println();
// 평균점수를 매개변수로 받아 합격여부를 반환한다.
// 반환받은 합격여부를 출력한다.
boolean isPassed = student.processScore(studentAverage);
System.out.println("합격여부: " + isPassed);
System.out.println();
// 학생 정보를 출력한다
student.display();
}
}
출력
학생정보를 입력하세요.
이름 : OOO
국어점수 : 95
영어점수 : 80
수학점수 : 100
평균점수: 91.66666666666667
합격여부: true
이름: OOO
국어점수: 95
영어점수: 80
수학점수: 100
앞에서 다룬 예제들은 매개변수가 모두 기본형이었다. 그런데 참조형 변수도 매개변수로 정의할 수 있다. 즉, 객체(객체의 주소값)를 인자로 전달받을 수 있다.
다음은 sampleValue
객체를 전달받아 메소드를 실행하는 클래스를 정의하고, 그 클래스로부터 생성된 객체를 main
메소드에서 활용하는 예제이다.
public class SampleValue {
/**
* 인자로 전달하는 객체를 생성하기 위한 클래스다.
*/
int x;
int y;
}
public class Sample {
/**
* SampleValue타입의 참조변수가 매개변수인 메소드다.
* 참조변수가 null인지 체크한 후, null이면 메소드를 즉시 종료한다.
* sampleValue객체의 x와 y값을 출력한다.
* sampleValue객체의 x에 300, y에 500을 대입한다.
* @param sampleValue
*/
public void test(SampleValue sampleValue) {
if (sampleValue == null) {
System.out.println("주소값이 올바르지 않습니다.");
return;
}
System.out.println("test의 sampleValue의 x값: " + sampleValue.x);
System.out.println("test의 sampleValue의 y값: " + sampleValue.y);
System.out.println();
System.out.println("test의 sampleValue가 참조하는 객체의 x, y값 변경하기");
sampleValue.x = 300;
sampleValue.y = 500;
}
}
public class SampleApp {
public static void main(String[] args) {
// sample객체의 메소드를 호출하기 위해 객체를 생성한다.
Sample sample = new Sample();
// sample객체의 메소드에 samplevalue객체의 주소값을 인자로 전달하기 위해 객체를 생성한다.
SampleValue sampleValue = new SampleValue();
// sampleValue객체의 x와 y를 각각 100과 200으로 초기화한다.
sampleValue.x = 100;
sampleValue.y = 200;
// sample객체의 test메소드를 호출한다.
sample.test(sampleValue);
// test메소드로 인해 변경된 sampleValue객체의 변수를 출력한다.
System.out.println("sampleValue의 x값: " + sampleValue.x);
System.out.println("sampleValue의 y값: " + sampleValue.y);
}
}
출력
test의 sampleValue의 x값: 100
test의 sampleValue의 y값: 200
test의 sampleValue가 참조하는 객체의 x, y값 변경하기
sampleValue의 x값: 300
sampleValue의 y값: 500
참조형 매개변수가 있는 메소드가 있듯, 메소드의 반환값으로 참조변수를 반환할 수 있다.
다음은 sampleValue
객체를 생성하고 주소값을 반환하는 메소드를 활용하는 예제다.
public class SampleValue {
/**
* 반환값으로 반환되는 객체를 생성하기 위한 클래스다.
*/
int x;
int y;
}
public class Sample {
/**
* sampleValue객체의 주소값을 반환하는 메소드다.
* SampleValue타입의 객체를 생성한다.
* 정수 2개를 인자로 전달받아 sampleValue객체의 변수에 대입한다.
* sampleValue객체의 주소값을 반환한다.
* @param num1
* @param num2
* @return sampleValue
*/
public SampleValue createSampleValue(int num1, int num2) {
SampleValue sampleValue = new SampleValue();
sampleValue.x = num1;
sampleValue.y = num2;
return sampleValue;
}
}
public class SampleApp {
public static void main(String[] args) {
//sampleValue객체를 생성하고 주소값을 반환하는 메소드를 호출하기 위한 sample객체를 생성한다.
Sample sample = new Sample();
// sample객체의 메소드를 호출해 sampleValue객체 2개를 생성한다.
// 생성된 객체의 주소값을 반환받아 각각 result1, result2에 대입한다.
SampleValue result1 = sample.createSampleValue(1, 2);
SampleValue result2 = sample.createSampleValue(3, 4);
// result1이 참조하는 객체의 변수에 저장된 값을 출력한다.
System.out.println("첫 번째 생성된 sampleValue객체의 변수에 저장된 값 출력");
System.out.println("x = " + result1.x);
System.out.println("y = " + result1.y);
System.out.println();
// result2이 참조하는 객체의 변수에 저장된 값을 출력한다.
System.out.println("두 번째 생성된 sampleValue객체의 변수에 저장된 값 출력");
System.out.println("x = " + result2.x);
System.out.println("y = " + result2.y);
}
}
출력
첫 번째 생성된 sampleValue객체의 변수에 저장된 값 출력
x = 1
y = 2
두 번째 생성된 sampleValue객체의 변수에 저장된 값 출력
x = 3
y = 4