메서드
메서드 = 함수 = 블랙박스
→ 필요한 값만 입력하면 결과를 얻을 수 있다
→ 메서드를 호출하는 곳에서는 메서드 선언은 알지만, 메서드 본문은 모른다.
메서드 목적
같은 코드를 여러번 반복해서 작성하지 않게 해 줌
재사용(같은 함수를 다른 입력 값으로 여러번 호출 가능)
메서드로 정리하면 전체 코드 구조를 한 눈에 볼 수 있다.
변경 사항이 발생하면 관련된 메서드만 수정하면 되기에(수정 범위가 메서드로 한정됨) 유지보수하기 좋다.
메서드를 적절하게 사용해 분류하면 구조적으로 읽기 쉽고, 유지보수 하기 좋은 코드를 만들 수 있다.
메서드 사용의 장점
- 코드 재사용: 메서드는 특정 기능을 캡슐화하므로, 필요할 때마다 그 기능을 다시 작성할 필요 없이 해당 메서드를 호출함으로써 코드를 재사용할 수 있다.
- 코드의 가독성: 이름이 부여된 메서드는 코드가 수행하는 작업을 명확하게 나타내므로, 코드를 읽는 사람에게 추가적인 문맥을 제공한다.
- 모듈성: 큰 프로그램을 작은, 관리 가능한 부분으로 나눌 수 있다. 이는 코드의 가독성을 향상시키고 디버깅을 쉽게 만든다.
- 코드 유지 관리: 메서드를 사용하면, 코드의 특정 부분에서 문제가 발생하거나 업데이트가 필요한 경우 해당 메서드만 수정하면 된다. 이렇게 하면 전체 코드 베이스에 영향을 주지 않고 변경 사항을 적용할 수 있다.
- 재사용성과 확장성: 잘 설계된 메서드는 다른 프로그램이나 프로젝트에서도 재사용할 수 있으며, 새로운 기능을 추가하거나 기존 기능을 확장하는 데 유용하다.
- 추상화: 메서드를 사용하는 곳에서는 메서드의 구현을 몰라도 된다. 프로그램의 다른 부분에서는 복잡한 내부 작업에 대해 알 필요 없이 메서드를 사용할 수 있다.
- 테스트와 디버깅 용이성: 개별 메서드는 독립적으로 테스트하고 디버그할 수 있다. 이는 코드의 문제를 신속하게 찾고 수정하는 데 도움이 된다.
메서드 호출
- 메서드 이름에 입력값을 전달하면 됨
- int sum1 = add(5, 10); // 실행 순서 // 1. add 호출 2. 반환값 있으면 반환 3. 반환값 sum1에 저장
- 메서드 호출 용어
- 인수(argument) : 함수 호출 시 함수 안에 넘기는 값
- 매개변수(parameter) : 메서드를 정의할 때 선언한 변수
메서드 정의
public static int add (int a, int b) {
// 메서드 본문, 실행 코드
}
[제어자] [반환타입] [메서드 이름](매개변수 목록) {
메서드 본문
}
return
함수는 return 문을 만나면 그즉시 메서드를 빠져나간다.
자바 대원칙
자바는 항상 변수의 값을 복사해서 대입한다
public static void main(String[] args) {
int num1 = 5;
int num2 = num1; // num1을 num2에 넣는 것이 아니라, num1의 값을 복사해서 num2에 넣는다.
num2 = 10;
System.out.println("num1=" + num1);
System.out.println("num2=" + num2);
}
그렇기에 각각의 메서드 안에서 사용하는 변수는 서로 완전히 분리된 다른 변수이다. 같은 이름의 변수가 있다면 우연일 뿐, 서로 영향을 주지 않는다.
- 예시 코드
- main()에서의 number와 changeNumber()의 number는 무관하다
package method; public class MethodValue2 { public static void main(String[] args) { int number = 5; System.out.println("1. changeNumber 호출 전, num1 : " + number); changeNumber(number); System.out.println("4. changeNumber 호출 후, num2 : " + number); } public static void changeNumber(int number) { System.out.println("2. changeNumber 변경 전, num2 : " + number); number *= 2; System.out.println("3. changeNumber 변경 후, num2 : " + number); } }
자동 형변환
자동 형변환은 크기가 작은 타입 → 크기가 큰 타입에서만 가능하다 (int < long < double)
메서드를 호출할 때, 매개변수에 값을 전달하는 것도 결국 변수에 값을 대입하는 것
메서드를 호출할 때는 전달하는 인수의 타입과 매개변수의 타입이 동일해야 전달이 된다. 단, 타입이 달라도 자동 형변환이 가능한 경우에는 호출 할 수 있다.
메서드 시그니처(method signature)
메서드 시그니처는 자바에서 메서드를 구분할 수 있는 고유한 식별자나 서명을 의미한다.
메서드 시그니처 = 메서드 이름 + 매개변수 타입/순서
// 매개변수 이름은 상관없다.
함수 호출 시 최대한 동일한 메서드 시그니처를 찾는다. 만약 없는 경우는 자동 형변환까지 고려해 동일한 이름에 파라미터 자동 형변환 되는 함수를 호출하기도 한다. (되도록이면 동일한 메서드 시그니처인게 좋다)
Reference
인프런 '김영한의 실전 자바 - 기본편'
'Dev Language > Java' 카테고리의 다른 글
[자바/기본] 2. 기본형과 참조형 (0) | 2024.01.04 |
---|---|
[자바/기본] 1. 클래스와 데이터 (4) | 2024.01.04 |
[자바/입문] 7. 배열 (0) | 2023.12.29 |
[자바/입문] 6. 스코프(scope), 형변환(type casting) (0) | 2023.12.29 |
[자바/입문] 4. 조건문, 5. 반복문 (2) | 2023.12.29 |