매소드는 객체의 동작에 해당하는 중괄호{} 블록을 말한다. 중괄호 블록은 이름을 가지고 있는데 이것이 메소드 이름이다, 메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다. 메소드는 필드를 읽고 수정하는 역할도 하지만, 다른 객체를 생성해서 다양한 기능을 수행하기도 한다, 메소드는 객체 간의 데이터 전달의 수단으로 사용된다.
리턴타입
리턴 타입은 메소드가 실행후 리턴 하는 값의 타입을 말한다. 메소드는 리턴값이 있을수도 있고 없을 수도 있다. 메소드가 실행후 결과를 호출한 곳에 넘겨줄 경우에는 리턴 값이 있어야 한다. 예를 들어 전자계산기 객체에서 전원을 켜는 powerOn() 메소드와 두 수를 나누는 기능인 divide()메소드가 있다고 가정해보자. divide() 메소드는 나눗셈의 결과를 리턴해야 하지만 powerOn() 메소드는 전원만 켜면 그만이다. 따라서 powerOn() 메소드는 리턴값이없고 divide() 메소드는 리턴값이 있다고 봐야한다. 리턴값이 없는 메소드는 리턴 타입에 void가 와야 하며 리턴값이 있는 메소드는 타입이 와야한다. divide() 메소드의 결과가 double 값이라면 double을 리턴 타입으로 사용해야한다.
메소드 이름
메소드 이름은 자바 식별자 규칙에 맞게 작성하면 되는데 다음 사항에 주의해야 된다.
- 숫자로 시작하면 안되고 $와_를 제외한 특수 문자를 사용하지 말아야한다.
- 관례적으로 메소드명은 소문자로 작성한다
- 서로 다른 단어가 혼합된 이름이라면 뒤이어 오는 단어의 첫머리는 글자는 대문자로 작성한다
매개 변수 선언
매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로 부터 받기 위해 사용한다.
리턴값과 매개변수 값을 가진 메소드 호출은 반드시 매개변수 갯수만큼 값을 주어야 한다.
호출시 넘겨준 매개값과 해당위치의 매개 변수인 x,y에 각각 저장되고 이 매개 변수들을 이용해서 메소드 블록을 실행하게된다. 매개값은 반드시 매게 변수의 타입에 부합되는 값이어야 한다.divide() 메소드가 int 타입 매게 변수를 가지고 있다면 호출시 매게 값으로 int 값이나 int타입으로 변환될 수 있는 값을 넘겨주어야 한다.
double이 64bit 고 int가 32bit 이다 위에 숫자 20.0과 30.0 은 double값으로 int 타입으로 형변환이 될수 없다. 하지만 byte타입은 8bit int타입 32bit 이므로 자동 타입 변환되기 때문에 컴파일 오류가 발생하지 않는다.
매게 변수의 수를 모를경우
메소드의 매게 변수는 개수가 이미 정해져 있는것이 일반적이지만, 경우에 따라서는 메소드를 선언할 때 매게 변수의 개수를 알수 없는 경우가 있다. 예를 들어 여러개의 수를 모두 합산하는 메소드를 선언해야 한다면 , 몇 개의 매개 변수가 입력될지 알 수 없기 때문에 매개 변수의 개수를 결정할 수 없을것이다.
해결책은 메소드를 호출할때 배열은 넘겨줌으로써 배열의 항목 값들을 모두 전달할수 있다. 배열의 항목 수는 호출할 때 결정된다.
"..." 으로 선언된 매개 변수의 값은 다음과 같이 메소드 호출 시 리스트로 나열해주면 된다. ".." 로 선언된 매개변수는 배열 타입이므로 배열을 직접 매객값으로 사용해도 좋다.
다음 여러 예시들을 한번보자
이 메소드들은 다 같은 값을 출력할것이다 sum3, sum 4 메소드의 실행문들이 완전 일치하는 것을 볼수 있다. 매개 변수의 선언 방법만 다를뿐이지 매개 변수의 타입이 배열 이므로 처리 내용이 같을수 밖에 없다.
'JAVA' 카테고리의 다른 글
JAVA 예외처리 (0) | 2020.11.15 |
---|---|
클래스의 구성 멤버(return) (0) | 2020.11.11 |
클래스의 구성 멤버(생성자) (0) | 2020.11.11 |
클래스의 구성 멤버(필드) (0) | 2020.11.10 |
객체 생성과 클래스 변수 (0) | 2020.11.10 |