hayu's 개발 일지

[TIL]240224 메서드(2) 본문

기술/java

[TIL]240224 메서드(2)

hayu00 2024. 2. 24. 21:59

메서드 정의

public static int add(int a, int b){
	// 메서드 본문, 실행 코드
}

제어자 반환타입 메서드이름(매개변수 목록){
	메서드 본문
}

- 제어자: public, static 과 같은 부분이다. 

- 반환 타입: 메서드가 실행된 후 반환하는 데이터의 타입을 지정한다. 메서드가 값을 반환하지 않는 경우 없다는 뜻의 void 를 사용해야 한다.   

- 메서드 이름: 메서드의 이름이다. 이 이름은 메서드를 호출하는데 사용된다.

- 매개변수: 파라미터라고도 부른다. 메서드의 입력 값으로, 메서드 내부에서 사용할 수 있는 변수이다. 매개 변수는 옵션이다. 입력값이 필요없는 메서드는 매개변수를 지정하지 않아도 된다. 

- 메서드 본문: 실제 메서드의 코드가 위치한다. 중괄호 {} 사이에 코드를 작성한다. 

 

void 와 return 생략

- 모든 메서드는 항상 return 을 호출해야 한다. 그런데 반환 타입 void 의 경우에는 예외로 생략해도 된다. 자바가 반환 타입이 없는 경우에는 return을 마지막줄에 넣어준다. 참고로 return 을 만나면 해당 메서드는 종료된다.  

 

반환 타입

- 반환 타입이 있으면 반드시 값을 반환해야 한다. 

=> 반환 타입이 있는 메서드는 반드시 return 을 사용해서 값을 반환해야 한다. 

 

return 문을 만나면 그 즉시 메서드를 빠져나간다. 

- return 문을 만나면 그 즉시 해당 메서드를 빠져나간다. 

- 반환 타입이 있는 메서드를 호출했는데 만약 반환값이 필요 없다면 사용하지 않아도 된다. (반환 값 무시)

 

메서드 호출과 값 전달

- 자바는 항상 변수의 값을 복사해서 대입한다. 

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

- num1 에 값 5를 복사해서 num2에 넣는 것이다. 

- 복사한다고 표현한 이유는 num1 의 값을 읽어도 num1 에 있는 기존 값이 유지되고, 새로운 값이 num2 에 들어가기 때문이다. 마치 num1 의 값이 num2 에 복사된 것 같다.

- num1 이라는 변수 자체가 num2 에 들어가는 것은 아니다. num1 에 들어있는 값을 읽고 복사해서 num2 에 넣는 것이다. 

- 간단하게 num1 에 있는 값을 num2 에 대입한다고 표현한다. 하지만 실제로는 그 값을 복사해서 대입하는 것이다. 

 

메서드와 형변환

- 메서드를 호출할 때도 형변환이 적용된다. 

 

명시적 형변환

public static void main(String[] args) {
        double number = 1.5;
//        printNumber(number); // double 을 int 에 대입하므로 컴파일 오류
        printNumber((int)number); // 명시적 형변환을 사용해 double 을 int 로 변환
    }

    public static void printNumber(int n) {
        
        System.out.println("숫자: " + n);
}

- 이 경우 (int) 가 없으면 컴파일 오류가 발생한다. 

- 이 경우에 메서드 호출이 필요하다면 위 코드처럼 명시적 형변환을 사용해야 한다. 

 

자동 형변환

- int < long < double

- 메서드를 호출할 때 매개변수에 값을 전달하는 것도 결국에 값을 대입하는 것이다. 따라서 자동 형변환을 적용한다.

public static void main(String[] args) {
        int number = 100;
        printNumber(number);
    }

    public static void printNumber(double n) {
        System.out.println("숫자: " + n);
    }

- double 형 매개변수에 int 형 인수를 전달하는데 문제없이 작동한다.

 

메서드 오버로딩

- 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩(Overloading)이라 한다. 

 

오버로딩 성공의 예

add(int a, int b)
add(int a, int b, int c)
add(double a, double b)

 

오버로딩 규칙

- 메서드의 이름이 같아도 매개변수의 타입 및 순서가 다르면 오버로딩을 할 수 있다. 참고로 반환타입은 인정하지 않는다. 

 

오버로딩 실패의 예

int add(int a, int b)
double(int a, int b)

  

'기술 > java' 카테고리의 다른 글

[TIL]240227 클래스와 생성자(1)  (0) 2024.02.27
[TIL]240226 애너테이션(Annotation)  (0) 2024.02.26
[TIL]240223 메서드(1)  (0) 2024.02.23
[TIL]240220 배열(2)  (0) 2024.02.20
[TIL]240219 배열(1)  (0) 2024.02.19