메소드 (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 |