728x90
이 글은 인프런 김영한 교수님의 자바 입문 강의를 듣고 정리한 글입니다.
메서드
- 자바에서는 함수를 메서드(Method)라 한다, 메서드도 함수의 한 종류라고 생각하면 된다
package Ch08;
public class method1 {
public static void main(String[] args) {
// 계산 1
int sum1 = add(5, 10);
System.out.println(sum1);
//계산 2
int sum2 = add(15, 20);
System.out.println(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)
- 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;
}
- 실행 결과를 반환하려면 return 문을 사용해 반환할 결과를 적어주면 된다
메서드 호출과 용어 정리
호출: call("hello", 20)
메서드 정의: int call(String str, int age)
- 메서드를 호출 할 때는 인수와 매개변수의 타입이 맞아야 한다. 또한 순서와 갯수도 맞아야한다
- 인수(Argument)
- “hello”, 20처럼 넘기는 값을 영어로 Argument, 한글로 인수라고 한다
- 매개변수(Parameter)
- 메서드를 정의할 때 선언한 변수인 String str, int age를 매개변수, 파라미터라고 한다
- 메서드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다
메서드 정의
제어자 반환타입 메서드이름(매개변수 목록) {
메서드 본문
}
- 제어자: public, static과 같은 부분
- 반환 타입: 메서드가 실행된 후 반환하는 데이터의 타입. 값을 반환하지 않는 경우 void 사용
- 메서드 이름: 이름은 메서드를 호출하는 데 사용
- 매개변수: 입력값으로 메서드 내부에서 사용할 수 있는 변수. 매개변수는 옵션이다
- 메서드 본문: 실제 메서드의 코드가 위치한다
매개변수가 없거나 반환 타입이 없는 경우
package Ch08;
public class method2 {
public static void main(String[] args) {
printHeader();
System.out.println("프로그램을 동작합니다");
printFooter();
}
public static void printHeader() {
System.out.println("프로그램을 시작합니다");
return;
}
public static void printFooter() {
System.out.println("프로그램을 종료합니다");
}
}
- 매개변수가 없는 경우
- 선언: public static void printHeader()와 같이 매개변수를 비워두고 정의하면 된다
- 호출: printHeader();와 같이 인수를 비워두고 호출하면 된다
- 반환 타입이 없은 경우
- 선언: public static void printHeader()와 같이 반환 타입을 void로 정의하면 된다
- 호출: printHeader();와 같이 반환 타입이 없으므로 메서드만 호출하고 반환 값을 받지 않으면 된다
- void와 return 생략
- 모든 메서드는 항상 return을 호출해야한다. 그런데 반환 타입 void의 경우에는 예외로 printFooter()와 같이 생략해도 된다. 자바가 반환 타입이 없는 경우에는 return을 마지막 줄에 넣어준다
반환 타입
- 반환 타입이 있는 메서드는 반드시 return을 사용해서 값을 반환해야 한다
package Ch08;
public class methodReturn1 {
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;
} else {
return false;
}
}
}
메서드 호출과 값 전달
- 자바는 항상 변수의 값을 복사해서 대입한다
package Ch08;
public class methodValue1 {
public static void main(String[] args) {
int num1 = 5;
System.out.println("1:" + num1); // 5
changeNumber(num1);
System.out.println("4:" + num1); // 5
}
public static void changeNumber(int num2) {
System.out.println("2:" + num2); // 5
num2 = num2 * 2;
System.out.println("3:" + num2); // 10
}
}
메서드와 형변환
- 메서드를 호출할 때도 형변환이 적용된다
명시적 형변환
package Ch08;
public class methodCasting1 {
public static void main(String[] args) {
double number = 1.5;
//printNumber(number);
printNumber((int) number); // 명시적 형변환을 통해 double을 Int로
}
public static void printNumber(int n) {
System.out.println("숫자: " + n);
}
}
자동 형변환
package Ch08;
public class methodCasting2 {
public static void main(String[] args) {
int number = 100;
printNumber(number);
}
public static void printNumber(double n) {
System.out.println("숫자: " + n);
}
}
메서드 오버로딩
- 오버로딩: 같은 이름의 메서드를 여러 개 정의하되, 매개변수의 타입, 개수, 순서를 다르게 해 구분하는 것
package Ch08;
public class Overloading1 {
public static void main(String[] args) {
System.out.println("1: " + add(1, 2));
System.out.println("2: " + add(1, 2, 3));
}
public static int add(int a, int b) {
System.out.println("1번 호출");
return a + b;
}
public static int add(int a, int b, int c) {
System.out.println("2번 호출");
return a + b + c;
}
}
정리
변수명 vs 메서드명
변수 이름은 일반적으로 명사를 사용한다. 한편 메서드는 무언가 동작하는데 사용하기 때문에 동사로 시작
- 변수명: customerName, totalSum …
- 메서드명: printReport(), calculateSum()
메서드 사용의 장점
- 코드 재사용: 특정 기능을 캡슐화하므로, 필요할 때마다 그 기능을 다시 작성할 필요 없이 메서드를 호출해 재사용할 수 있다.
- 코드의 가독성: 이름이 부여된 메서드는 코드가 수행하는 작업을 명확하게 나타내므로 추가적인 문맥 제공
- 모듈성: 큰 프로그램을 작은 관리 가능한 부분으로 나눌 수 있다. 가독성 향상과 디버깅을 쉽게 만든다
- 코드 유지 관리: 수정이 필요한 경우 해당 메서드만 수정하면 된다
- 재사용성과 확장성: 다른 프로그램이나 프로젝트에서도 재사용 가능하고, 기능 추가와 확장이 유용하다
- 추상화: 메서드를 사용하는 곳에서는 메서드의 구현을 몰라도 된다.
- 테스트와 디버깅 용이성: 개별 메서드는 독립적으로 테스트하고 디버그할 수 있다. 신속한 수정 가능
이미 notion에서 작성한 글이라 같은 날짜에 올라갈 수도 있습니다
728x90
'Language' 카테고리의 다른 글
[Java] 입문 - 7.배열 (0) | 2025.02.10 |
---|---|
[Java] 입문 - 6. 훈련 (0) | 2025.02.10 |
[Java] 입문 - 5. 스코프 및 형변환 (0) | 2025.02.10 |
[Java] 입문 - 4. 반복문 (0) | 2025.02.10 |
[Java] 입문 - 3. 조건문 (0) | 2025.02.07 |