JAVA

[JAVA] 메소드

shb 2022. 2. 8. 17:29

메소드 (Method):
  반복되는 코드, 내용, 재사용해야할 코드들을 한 뭉치로 묶어서
  따로 메소드로 만들은 다음(정의) 이를 필요할때마다 사용(호출)한다. 
 
  ※ 자바는 '함수(function)' 가 따로 없습니다
 
 메소드 정의:
  메소드는 main 메소드 바깥에서!!, class 안에서 정의!!

 메소드 정의구문:
   수식어     리턴타입     메소드이름  (매개변수, ...) { 메소드 본체(body) }
    modifier return_type  method_name(parameter, ...) { ... }

수식어(modifier) : public, static, private, ... (생략 가능)
   
매개변수 (parameter) : 메소드 호출시 넘겨주는 값.

리턴타입 (return type) : 메소드 종료후 호출한 쪽에 돌려주는 값
void, int, double, String ...
(리턴타입 void의 의미는 되돌려주는 값(return 값)이 없다는 의미)

메소드 signature 란?:
메소드 이름 + 매개변수 리스트 (매개변수 타입, 순서, 개수)
sayAge(int)
sayHello3(String, int)

 

 

 이클립스 단축키 : 메소드 이름위에서
 F3 : Open Declaration  (이 메소드 는 어디서 정의?)
 CTRL + ALT + H : Open Call Hierarchy (이 메소드는 어디서 호출되나?)

 디버깅 :
  step into : 현재 디버깅 위치의 메소드 호출 내부 코드 진입
  step out (step return) : 현재 디버깅 진행중인 메소드 return 까지 진행후 호출한 측으로 돌아감
  resume : 다음 breakpoint 까지 쭈욱 진행 

 

 return 의 의미

  1. 메소드를 호출한 곳으로 값을 리턴한다.
  2. 메소드 종료
  3. 메소드 정의시 명시한 리턴타입의 값이 '반드시' 리턴되어야 한다
         (혹은 리턴타입으로 형변환 가능한 값이)

 * Refactor - Inline   (ALT + SHIFT + I)
 * Refactor - Extract Local Variable  (ALT + SHIFT + L)

 

 

 * 메소드 연습

  숫자값을 입력 받아서 
  위 값을 한변의 길이로 한 정사각형의 넓이를 구하고
  위 값을 반지름으로 한 원의 넓이를 구하기
   
  public static double calcRectArea(double length)
  public static double calcCircleArea(double r)

 

 

 Method Overloading (메소드 중복 정의)
 같은 이름으로 메소드를 매개변수 리스트를 달리하여 중복 정의, 
 즉, 이름이 같아도 메소드 signature 가 다르면 중복정의 가능.

  Method Signature 란
   메소드 이름 + 매개변수 리스트 (parameter list)

 1. 매개변수의 개수가 다르거나
 2. 매개변수의 자료형이 다르거나
 3. 매개변수의 순서가 다를 때
 위 3개를 '매개변수 리스트' 라 한다

메소드의 리턴 타입만 다른 경우는 중복 정의할 수 없다!!

메소드 오버로딩의 장점:
동일한 동작을 하는 메소드에 대해 매개변수만 달리하여 중복정의 하면
이 메소드를 사용하는 입장에선 여러타입의 이름을 익힐 필요가 없다. 

 

 

Math 클래스의 메소드

 

- Math.random() : 0.0 <=  r < 1.0 사이의 난수 발생(double)

 double Math.floor(num) : num을 넘지 않는 가장 큰 정수(바닥)
 double Math.ceil(num) : num보다 큰 가장 작은 정수(천장)
 long Math.round(num) : num에서 소수점 사사오입 (반올림)

 

 

* 1,2,3 범위중 난수 발생시키기

 

* Random 객체 사용하여 난수 출력

 

 

* 메소드 연습 : 컴퓨터 생각 맞추기 게임 
 1. 메뉴를 보여주고
 2. 사용자로부터의 입력을 받고
 3. 컴퓨터의 생각(난수)와 비교 판정 내기
 4. 사용자가 메뉴에서 '종료' 누르면 종료 시키기

 

  Call By Value : 값에 의한 호출
  Call By Reference : 참조에 의한 호출
 
  메소드 호출시 매개변수에 넘겨주는 값의 '복사' 가 발생.
 
  자바에선
  primitive type 이 매개변수 인 경우 Call By Value
    : '값' 이 복사된다 
    : 메소드에서 매개변수 값을 변경해도 호출한 원본 쪽은 변화 없음
   
  reference type 이 매개변수 인 경우 Call By Reference 발생
  : '주소' 가 복사된다.
  : 메소드에서 매개변수 를 통해 변경하면 호출한 원본 쪽도 변화 발생

 

 

메소드와 배열
매개변수가 배열,  리턴타입이 배열

 

 

 

 재귀 호출 (recursive call)
 메소드(혹은 함수) 내부에서 메소드가 자기 자신을 또다시 호출하는 것.
   
 장점:
 복잡한 문제를 간단하고 논리적으로 기술 가능.
 
 단점 & 주의 :
 메모리 부담 발생 
 무한히 재귀호출 할수 없다. --> Stack Overflow 발생
 따라서 재귀호출은 '종료조건'이 반드시 필요하다.

 

 

가변인자 (가변매개변수,가변인수) Variable arguments
   Java 5.0 부터 등장
     매개변수(argument, 인자)의 개수를 가변적으로 조정하는 기술
     ** 가변인자 기술이 없던 시절에는 '컬렉션' 사용.

     컴파일러에서 가변인자를 아래와 같이 변환해준다.
  
   1) 매개변수를 배열로 변환해준다
        원본 : public static void display(String... args)
        컴파일러 변환 후 : public static void display(String args[])
  
   2) 메소드 호출시 인자들을 이용해서 배열로 만들어 준다
        원본 : VarArgsMain.display("Hello", "World", "Korea");
        컴파일러 변환 후 : VarArgsMain.display(new String[] {"Hello", "World", "Korea" })

'JAVA' 카테고리의 다른 글

[JAVA] 접근제한자, final, static  (0) 2022.02.09
[JAVA] 클래스  (0) 2022.02.08
[JAVA] 형변환, 변수  (0) 2022.02.08
[JAVA] 파일 입출력  (0) 2021.11.21
[JAVA] 쓰레드  (0) 2021.11.21