
6-4메소드
- 메소드는 객체의 동작에 해당하는 중괄호 {} 블록을 말한다.
- 중괄호 블록 이름이 메소드 이름이며,
메소드를 호출하면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다.
- 메소드 선언은 선언부와 실행 블록으로 구성된다.

메소드 선언
- 선언부(리턴타입, 메소드 이름, 매개 변수 선언)와 실행 블록으로 구성.
리턴타입
- 리턴값이 없는 메소드는 리턴 타입에 void로 기술한다.
- 리턴값이 있는 메소드는 리턴값의 타입을 기술. 그러나 리턴값이 중요하지 않고 메소드 실행이 중요할 경우에는 변수를 선언하지 않고 메소드를 호출할수도 있다.
ex) double result = divide(10, 20) ok.
// divide(10, 20) ok.
메소드 이름
- 메소드 이름은 소문자로 작성한다.
- 메소드가 어떤 기능을 수행하는지 쉽게 알 수 있도록 기능 이름으로 지어주는 것이 좋다.
매개 변수 선언
- 매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용된다.
-> 손코딩
- 이전에도 느끼고 코드를 칠 때마다 느끼지만 코드를 눈으로 보고 읽으면 이해가 된다. 그래서 이번에는 한번 먼저 슥 보고 제시된 것들만 다시 보고 했는데 몇가지씩 빠지는게 생긴다.
매개 변수의 개수를 모를 경우
- 매개 변수를 배열 타입으로 선언해야 한다.
1.int sum1(int[] values){} 와 같이 메소드를 호출하기 전에 배열을 생성하는 방법.
2.int sum2(int ... values) {} 와 같이 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개값으로 사용하는 방법. 두가지가 있다.
리턴(return)문
- 궁금한게 생기면 p254 ~ 258 부분을 다시 살펴보자.
메소드 호출
- 클래스 외부에서 호출할 경우에는 우선 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해어 메소드를 호출해야 한다. 객체가 존재해야 메소드도 존재하기 때문이다.
객체 외부에서 호출
- 객체가 생성되었다면 참조 변수와 함께 도트(.) 연산자를 사용해서 메소드를 호출할 수 있다. 도트(.) 연산자는 객체 접근 연산자로 객체가 가지고 있는 필드나 메소드에 접근할 때 사용된다.
참조변수.메소드(매개값, ...); // 리턴값이 없거나, 있어도 리턴값을 받지 않을 경우
타입 변수 = 참조변수.메소드(매개값, ...); // 리턴값이 있고, 리턴값을 받고 싶을 경우
-> 손코딩
Car2 mycar = new Car2();
mycar.keyTurnOn();
mycar.run();
//내가 해본것. 내가해본것과 아래의 차이점은?
// mycar.getSpeed();
// System.out.println("현재 속도: " + mycar.speed + "km/h");
int speed = mycar.getSpeed();
System.out.println("현재 속도: " + speed + "km/h");
- 손코딩도 최대한 보고 따라 치는게 아니라 그 다음에 무엇이 와야할지 생각하면서 쳐봤는데 원하는 출력이 나오긴 했다. 그리고나서 책을 다시 보니 다르다. 차이점을 잘 알아봐야겠다.
메소드 오버로딩
- 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을 메소드 오버로딩이라고 한다.
- 메소드 오버로딩의 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다는 것이다.
- 매개값을 다양하게 받아 처리할 수 있도록 하기 위해 사용한다.
-> 손코딩을 해보니 왜 변수에 값을 저장해야되는지 좀 더 이해가 됐다. 6_4_calcu참고
마무리
- 리턴문 : 메소드 선언부에 리턴 타입이 있다면 리턴값을 지정하기 위해 returna문이 반드시 있어야 한다. 리턴 타입이 void라면 return문은 필요 없지만, 메소드 실행 종료를 위해 사용할 수도 있다.
- 복습 응용 문제를 풀어보는데 앞에 손코딩을 따라하며 이해했던 부분도 혼자 생각하며 입력하려니 너무 어렵고 어렵고 어려웠다.. 그렇지만 이렇게 어려움을 느끼고 고민하는 과정을 반복하다보면 언젠가 내것으로 다 흡수되어 있으리라는 믿음으로 계속 힘내봐야겠다.
*참고 혼자공부하는자바 신용권 지음 한빛미디어.