상세 컨텐츠

본문 제목

[TIL#11-3] Java를 자바랑 part.5 <메서드>

내배캠/Chapter2

by DK9 2023. 10. 19. 15:42

본문

1. 메서드

 1) 선언

리턴타입 메서드명(매개변수, ...) { 실행할&nbsp;코드&nbsp;작성}

   (1) 반환 부분(= return)

 : 턴이 없다면 리턴타입에 void를 사용한다.

 : 메서드는 실행할 때 return문을 만나면 그대로 종료하게 되는데 void 타입일 때 'return;' 이렇게 return문을 사용하면 원하는 지점에서 메서드를 종료할 수 있다. 메서드의 output부분이다.

 

   (2) 매개변수

 : 메서드를 호출할 때 메서드로 전달하려는 값을 받아내기 위한 변수이다.

 : input부분이다. 2개의 값을 전달하기 위해서는 (type 변수명, type 변수명) 순서와 타입에 맞춰 값을 넣어주면 된다. 전달하려는 값이 없다면 생략 가능하다.

 : 아래의 형태처럼 '...' 을 이용하여 가변길이 변수도 선언할 수 있다. 그러면 carSpeeds(100, 80); carSpeeds(110, 120, 150); 처럼 매개값을 ,(반점)으로 구분하여 개수 상관없이 전달 가능하다.

 

 

 

 

2) 호출 방법

 : 메서드이름 ( 매개변수 ); 형식으로 호출한다.

 : 메서드를 호출한다 라는 의미는 메서드의 블록 내부에 작성된 코드를 실행한다는 의미

 : 필드와 마찬가지로 객체를 만들고 난 후 도트연산자 등 을 통해서 사용할 수 있다.

 

  3) 실습

   (1) class에서 gasPedal 에 2개의 매개변수(double kmh, char type)를 입력 받도록 했다(우측 1번째 그림). 결과로 객체에서 gasPedal의 매개변수로 kmh와 type을 input해야 호출할 수 있다. 값은 "speed = 100.0" 이고 ChangeGear는 해당부분 sout에서 "D"로 나왔다.

   (2) 다음으로 class에서 가변길이 매개변수를 선언했다. 그 결과 객체에서 입력값 개수 제한없이 전달 할 수 있게되었다.

   (3) 혹시 같이 사용할 수는 없는가 싶어서 가변길이 매개변수를 사용하는 새로운 메서드 'Gears'를 만들고 실험해보았다.

객체 main 메서드 (좌)&nbsp; &nbsp; &nbsp;/&nbsp; &nbsp; &nbsp; &nbsp;설명서 class의 메서드 (우)

 결과값은 이렇게 나왔다. G = D  /  G = A  /  G = V  /  G = C  /  speed = 100.0  /  car gear =  /

 같이 사용할 수 있다는 점을 확있했고 역시나 새로운 메서드를 만들었기에 기존의 gears에는 초기값인 공란이 출력되는 모습이다.

 

 

  4) 오버로딩

 : 함수가 하나의 기능만 구현하는 것이 아니라 하나의 메서드 이름으로 여러 기능을 구현하도록 하는 기능

 : 한 클래스 내에 이미 사용하는 같은 이름의 메서드가 있더라도, 매개변수의 개수, 타입, 순서가 다르면 동일한 이름을 사용해 메서드를 정의할 수 있다.

 

   (1) 오버로딩 조건

예시 (매개 변수가 다 다르다.)

public void println(boolean x) {
    if (getClass() == PrintStream.class) {
        writeln(String.valueOf(x));
    } else {
        synchronized (this) {
            print(x);
            newLine();
        }
    }
}

public void println(char x) {
    if (getClass() == PrintStream.class) {
        writeln(String.valueOf(x));
    } else {
        synchronized (this) {
            print(x);
            newLine();
        }
    }
}

public void println(int x) {
    if (getClass() == PrintStream.class) {
        writeln(String.valueOf(x));
    } else {
        synchronized (this) {
            print(x);
            newLine();
        }
    }
}

 : 메서드의 이름이 같고, 매개변수의 개수 or 타입 or 순서가 달라야한다. 모두 다를 필요없다.

 : '응답 값만' 다른 것은 오버로딩을 할 수 없다.

 : 접근 제어자만 다른 것도 오버로딩 할 수 없다.

   (2) 오버로딩의 장점

 : 메서드 이름 하나로 상황에 따른 동작을 개별로 정의할 수 있다.

 

   (3) 기본형, 참조형 매개변수

    ㄱ. 기본형 매개변수

 : 값 자체가 복사되어 넘어가기 때문에 매개값으로 지정된 변수의 원본 값이 변경되지 않는다. 즉, 읽기만 가능하다.

객체(인스턴스)에서 type에 D를 입력, brakePedal(D)
그러나 breakPedal의 설명서 메소드에서 강제로 type 'P'로 고정
따라서 객체(인스턴스)의 값 type을 출력하면 D. 하지만 실제 car.gear의 type은 P.

 

    ㄴ. 참조형 매개변수

 : 값이 저장된 원본 주소를 알 수 있기에 값을 읽고 변경할 수 있다. 즉 읽고 변경할 수 있다.

객체(인스턴스)에서 1번 설명서에 있는 타이어에 금호를 입력. 이후 실행된 코드에서 setTire 메서드 호출.
2번 설명서 클래스의 setTire 메서드
참조형은 주소를 저장하고 주소를 통해서 원본값(1번 설명서)을 변경할 수 있음.
즉, 타이어 설계도(1번 설명서)에도 금호가 아닌 기아가 최종적으로 된다.

 

관련글 더보기