두 숫자를 입력을 받아서 더하고 출력하는 단순한 기능을 개발
//계산 1
int a = 1;
int b = 2;
System.out.println(a + "+" + b + " 연산 수행");
int sum1 = a + b;
System.out.println("결과 출력 :" + sum;);
//계산2
int x = 10;
int y = 20;
System.out.println(x + "+" + y + " 연산 수행");
int sum2 = x + y;
System.out.println("결과2 출력 :" + sum2);
잘 살펴보면, 같은 연산이 두 번 실행이 되는 것을 볼 수 있다

함수 정의
add(a,b) = a+b;
이름이 add고 a,b라는 두 값을 받는 함수이며 a + b 연산을 수행한다.
함수 사용
add(3,2) 결과 : 5
add(5,6) 결과 : 11
자바에서는 함수를 메서드라고 한다.
int sum 1 = add (5,10);
System.out.println("결과1 출력: " + sum1);
int sum 2 = add (15,20);
System.out.println("결과2 출력: " + sum2);
//add 메서드
public static int add (int a, int b){
System.out.println(a +"+" + b + " 연산 수행");
int sum = a+ b;
return sum;
public static int add(int a, int b);
System.out.println(a +"+" + b + " 연산 수행");
int sum = a + b;
return sum ;
이 부분이 바로 메서드
public static int add(int a, int b);
public static
public : 다른 클래스에서 호출할 수 있는 메서드라는 뜻이다. 접근 제어에서 학습한다.
static : 객체를 생성하지 않고 호출할 수 있는 정적 메서드라는 뜻이다.
int add(int a, int b)
int = 반환 티입을 정의한다. 메서드의 실행 결과를 반환할 때 사용할 반환 타입을 지정
add = 메서드의 이름을 부여한다. 이 이름으로 메서드를 호출할 수 있음
(int a, int b) = 메서드를 호출할 때 전달되는 입력 값을 정의, 이 변수들은 메서드 안에서만 사용, 메서드 안에서 사용되는 변수를 파라미터, 매개변수 라고 함.
System.out.println(a + "+" + b + " 연산 수행");
int sum = a + b;
return sum
int sum1 = add (5,10);
int sum2 = add (15,20);
메서드를 호출할 때, 메서드에 넘기는 값과 매개변수의 타입이 맞아야 된다.
또한 넘기는 값과 파라미터의 순서와 갯수도 맞아야 한다!
호출: call("hello", 20)
메서드 정의: int call(String str, int age)
public static int add(int a, int b){
//메서드 본문, 실행코드
}
제어자 반환타입 메서드 이름 (매개변수 목록){
메서드 본문
}
printHeader();
printFooter();
public static void printHeader(){
System.out.println("=프로그램을 시작합니다=");
return; // void경우 생략 가능
}
public static void printFooter(){
System.out.println("=프로그램을 종료합니다=");
return;
printHeader(), printFooter() 메서드는 매개변수도 없고, 반환타입도 없다!
매개변수가 없는 경우,
반환 타입이 있으면, 반드시 값을 반환해야 한다
--> 반환 타입이 있는 메서드는 반드시 return을 사용해서 값을 반환해야 한다.
public static void main(String[] args) {
boolean result = odd(2);
System.out.println(result)
}
public static boolean odd(int i){
if(i% 2 ==1){
return true;
}
}
}
public static boolean odd(int i){
if(i% 2 ==1){
return true;
} else {
return false;
}
public static void main(String[] args) {
checkAge(10);
cheakAge(20);
}
pubic static void checkAge(int age){
if (age<18){
System.out.println(age +"살, 미성년자는 출입이 불가합니다.)
return;
}
System.out.println(age + "살, 입장하세요);
}
}
이 대원칙을 꼭! 기억하자
package method;
public class MethodValue0 {
public static void main(String[] args) {
int num1 = 5;
int num2 = num1;
num2 = 10;
System.out.println("num1=" + num1);
System.out.println("num2=" + num2);
}
}
num1 = 5
num2 = 10
<실행과정>
int num2 = num1; //num1의 값은 5이다. num(5)
int num2 = 5;// num2 변수에 대입하기 전에 num1의 값 5를 읽는다. num1(5), num2(5)
num2 = 10; num2에 10을 대입한다
package method;
public class MethodValue2 {
public static void main(String[] args) {
int number = 5;
System.out.println("1. changeNumber 호출 전, number: " + number);
changeNumber(number);
System.out.println("4. changeNumber 호출 후, number: " + number);
}
public static void changeNumber(int number) {
System.out.println("2. changeNumber 변경 전, number: " + number);
number = number * 2;
System.out.println("3. changeNumber 변경 후, number: " + number); /
}
}
<실행결과>
1. changeNumber 호출 전, number: 5
2. changeNumber 변경 전, number: 5
3. changeNumber 변경 후, number: 10
4. changeNumber 호출 후, number: 5
메서드를 사용해서 값을 변경하려면?
public static void main(String[] args) {
int num1 = 5;
System.out.println("changeNumber 호출 전, num1: " + num1); // 출력: 5
num1 = changeNumber(num1);
System.out.println("changeNumber 호출 후, num1: " + num1); // 출력: 10
}
public static int changeNumber (int num2){
num2 = num2 * 2;
return num2;
}
실행결과
changeNumber 호출 전, num1 = 5
changeNumber 호출 후, num2 = 10
실행 과정
num1 = changeNumber(num1); //num1(5)
num1 = changeNumber(5);
//호출 시작:changeNumber()
//num1의 값 5가 num2에 대입된다. num1의 값을 num2에 복사한다. num1(5), num2(5)
int changeNumber(int num2=5)
num2 = num2 * 2; //계산 결과: num1(5), num2(10)
return num2; // num2의 값은 10이다.
return 10;
//호출 끝: changeNumber()
num1 = changeNumber(5);//반환 결과가 10이다.
num1 = 10;//결과: num1(10)
double number = 1.5;
printNumber(number); //double을 int형에 대입하므로 컴파일 오류
printNumber((int)number); //명시적 형변환을 사용해 double을 int로 변환
public static void printNumber(int n){
System.out.println("숫자 : " + n);
}
}
int < long < double
int number = 100;
printNumber(number)
public static void printNumber(double n){
System.out.println("숫자 : " + n);
}
double형 매개변수에 int형 인수를 전달하는데 문제없이 잘 작동함.
실행결과 숫자 : 100.0
자동 형변환
printNumber(number); // number는 int형 100
printNumber(100); //메서드를 호출하기 전에 number 변수의 값을 읽음
void printNumber(double n=100) //double형 파라미터 변수 n에 int형 값 100을 대입
void printNumber(double n=(double) 100) //double이 더 큰 숫자 범위이므로 자동 형변환 적용
void printNumber(double n=100.0) //자동 형변환 완료
<오버로딩 성공>
add(int a, int b)
add(int a, int b, int c)
add(double a, double b)
이름이 같고 매개변수가 다른 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라고 함.
같은 이름으로 메서드를 여러개 정의했다고 이해하면 됌
메서드의 이름이 같아도, 매개변슈의 타입 및 순서가 다르면 오버로딩할 수 있다.
단, 반환타입은 인정하지 않는다.
<오버로딩 실패>
int add(int a, int b)
double add(int a, int b)
<오버로딩 실패>
int add(int a, int b)
int add(int c, int d)
이름이 같아도 메서드 시그니처가 다르면 다른 메서드로 간주, 반환타입은 시그니처에 포함되지 않음. 위에 두 메서드를 살펴보면, add(int a, int b)로 메서드 시그니처가 같다. 따라서 메서드의 구분이 불가능하므로 오류 발생
예제 1)
//첫번째 add 메서드 : 두 정수를 받아서 합을 반환한다.
public static int add(int a, intb){
System.out.println("1번 호출");
return a + b;
}
//두번째 add 메서드 : 세 정수를 받아서 합을 반환한다.
//첫번째 메서드와 이름은 같지만, 매개변수 목록이 다르다!
public static int add(int a, int b, int c){
System.out.println("1번 호출");
return a + b+ c;
}
1: 정수 1,2를 호출했으므로 add(int a, int b) 가 호출된다.
2: 정수 1,2,3을 호출했으므로 add(int a, int b, int c) 가 호출된다
예제 2) - 매개변수의 타입이 다른 오버로딩
public static void myMethod(int a, double b){
System.out.println("int a, double b");
}
public static void myMethod(double a, int b){
System.out.println("double a, int b");
1: 정수1, 실수 1.2를 호출했으므로 myMethod(int a, double b) 가 호출된다.
2: 실수 1.2, 정수 2를 호출했으므로 myMethod(double a, int b) 가 호출된다
예제 3)
//첫번째 add 메서드 : 두 정수를 받아서 합을 반환한다.
public static int add(int a, int b){
System.out.println("1번 호출");
return a+b;
}
// 두번째 add 메서드 : 두 실수를 받아서 합을 반환한다.
// 첫번째 메서드와 이름은 같지만, 매개변수 유형이 다르다 !
public static double add(double a, double b){
System.out.println("2번 호출");
return a+b;
}
1: 정수1, 정수 2를 호출했으므로 add(int a, int b) 가 호출된다.
2: 실수 1.2, 실수 1.5를 호출했으므로 add(double a, double b) 가 호출된다.
변수 이름은 일반적으로 명사를 사용한다.
메서드는 무언가를 동작하는데 사용하기 때문에, 일반적으로 동사로 시작한다