메서드

메서드 = 함수 = 블랙박스

→ 필요한 값만 입력하면 결과를 얻을 수 있다

→ 메서드를 호출하는 곳에서는 메서드 선언은 알지만, 메서드 본문은 모른다.

 

메서드 목적

같은 코드를 여러번 반복해서 작성하지 않게 해 줌

재사용(같은 함수를 다른 입력 값으로 여러번 호출 가능)

메서드로 정리하면 전체 코드 구조를 한 눈에 볼 수 있다.

변경 사항이 발생하면 관련된 메서드만 수정하면 되기에(수정 범위가 메서드로 한정됨) 유지보수하기 좋다.

메서드를 적절하게 사용해 분류하면 구조적으로 읽기 쉽고, 유지보수 하기 좋은 코드를 만들 수 있다.

 

메서드 사용의 장점

  • 코드 재사용: 메서드는 특정 기능을 캡슐화하므로, 필요할 때마다 그 기능을 다시 작성할 필요 없이 해당 메서드를 호출함으로써 코드를 재사용할 수 있다.
  • 코드의 가독성: 이름이 부여된 메서드는 코드가 수행하는 작업을 명확하게 나타내므로, 코드를 읽는 사람에게 추가적인 문맥을 제공한다.
  • 모듈성: 큰 프로그램을 작은, 관리 가능한 부분으로 나눌 수 있다. 이는 코드의 가독성을 향상시키고 디버깅을 쉽게 만든다.
  • 코드 유지 관리: 메서드를 사용하면, 코드의 특정 부분에서 문제가 발생하거나 업데이트가 필요한 경우 해당 메서드만 수정하면 된다. 이렇게 하면 전체 코드 베이스에 영향을 주지 않고 변경 사항을 적용할 수 있다.
  • 재사용성과 확장성: 잘 설계된 메서드는 다른 프로그램이나 프로젝트에서도 재사용할 수 있으며, 새로운 기능을 추가하거나 기존 기능을 확장하는 데 유용하다.
  • 추상화: 메서드를 사용하는 곳에서는 메서드의 구현을 몰라도 된다. 프로그램의 다른 부분에서는 복잡한 내부 작업에 대해 알 필요 없이 메서드를 사용할 수 있다.
  • 테스트와 디버깅 용이성: 개별 메서드는 독립적으로 테스트하고 디버그할 수 있다. 이는 코드의 문제를 신속하게 찾고 수정하는 데 도움이 된다.

 

메서드 호출

  • 메서드 이름에 입력값을 전달하면 됨
  • 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

인프런 '김영한의 실전 자바 - 기본편'

 

+ Recent posts