기본자료형 변수와 참조자료형 변수의 차이
기본자료형 변수는 변수자신이 값을 가지지만 참조자료형 변수는 변수자신이 값을 갖고 있는 것이 아니라 값이 있는 메모리를 참조합니다.
int a = 10;
위의 문장에서 a는 기본자료형 변수이며 변수자신이 10이라는 값을 갖고 있습니다.
그러나 다음의 배열에서는
int []b = {10,20,30,40,50};
배열이름 b는 변수자신이 값을 갖고 있는 것이 아니라 값이 있는 메모리를 참조합니다. 이러한 배열을 참조자료형이라고 합니다
메소드
어떠한 문제해결을 위한(기능을 위한) 서로 관련있는 명령어들의 집합을 메소드라고 합니다.
어떤 일을 수행하기 위한 명령어들이 빈번하게 사용이 된다면 그 일을 처리하기 위한 명령어들을 모아서
메소드로 만들어 두면 매번 똑같은 명령어들을 일일이 쓰지 않고 메소드를 호출하여 사용할 수 있습니다.
메소드를 만들때에는 다음과 같이 그 메소드가 수행하는 일에 알맞도록 이름을 정해주고 소괄호를 반드시 열고 닫고 해야 합니다. 또, 소괄호 안에서는 그 메소드를 실행에 필요한 값을 전달받을 수도 있습니다.
그 메소드의 역할에 따라 값을 전달받지 않을 수도 있고, 한개 전달 받을 수도 있고 때에따라 여러개 전달 받을 수 있습니다.
실제로 메소드가 해야하는 명령어 들은 중괄호 {}속에다가 써 줍니다.
메소드이름( [자료형 변수명1, 자료형 변수명2, ... ] ){
메소드가 해야할 명령어(들)
}
이렇게 메소드를 만들어 놓고 필요할 때에 메소드 이름을 써주면 메소드의 중괄호{}안의 명령어들이 차례로 동작하고 다 동작이 끝나면 메소드를 호출한 쪽으로 되돌아갑니다.
때로는 메소드{} 중간에서 다 끝나기도 전에 어떠한 상황에 따라 중간에 나머지 명령어들을 마저 동작하지 않고 되돌아 가게 할 수 도 있습니다.
그때 되돌아 가게 하기 위한 명령어는 return입니다.
메소드 {} 의 맨끝에는 return이라는 말을 쓰지 않아도 생략이 된 것입니다.
메소드를 만들때에 메소드이름 왼쪽에 메소드의 자료형을 써 주어야 합니다.
메소드의 자료형이란 메소드는 호출문에 의해서 동작하고 메소드의 내용이 다 끝나면 메소드를 호출한 쪽으로 되돌아 갑니다. 이때 되돌아 갈때에 메소드 안에서 처리된 어떠한 결과값을 갖고 되돌아 갈 수도 있고 아무값도 갖지 않고 빈손으로 되돌아 갈 수 도 있습니다.
만약, 되돌아 갈때에 아무값도 갖지 않고 가는 경우를 "리턴값이 없다"라고 하고 어떠한 처리된 결과 값을 갖고 가는 경우라면 "리턴값이 있다"라고 합니다. 만약 리턴값이 있는 경우라면 메소드 이름 왼쪽에 리턴값의 자료형을 써줍니다. 리턴값이 없는 경우에는 void라고 써줍니다.
가령, 메소드 안의 내용이 다음과 같다면
void 메소드이름(){
return;
}
의 경우에는 리턴값이 없으므로 메소드이름 왼쪽에 void라고 써야 합니다.
메소드의 내용이 다음과 같다면
int 메소드이름(){
int sum = 0;
어쩌구저쩌구...
return sum;
}
위의 경우는 리턴값이 있으므로 메소드이름 왼쪽의 리턴값의 자료형인 int를 써주어야 합니다.
메소드를 만들기 위해서는 그 메소드를 사용하는 클래스 안에서 메소드를 만들 수도 있고 별도의 메소드를 포함하는 클래스를 만들어 사용할 수도 있습니다.
우리가 어떠한 클래스안에 메소드를 만들어 놓고 그 메소드를 사용하려면 마치, Scanner의 next메소드를 사용하거나 Random의 next를 사용하거나 Date의 getYear를 사용할 때 처럼 반드시 객체를 생성 해 놓고 그 객체를 통해서 메소드를 사용할 수 있습니다.
그런데, 만약 System.out.println() 처럼 객체 없이도 사용하게 하려면 메소드이름 왼쪽에 static을 붙이면 객체를 생성하지 않고 클래스이름.메소드이름() 으로 바로 사용할 수도 있습니다
하나의 파일에 두개이상의 클래스를 만들때에는 메인메소드를 포함하는 클래스이름으로 파일명을 저장합니다.
메소드의 내용이 다음과 같다면
int 메소드이름(){
int sum = 0;
어쩌구저쩌구...
return sum;
}
메소드를 호출한 결과값이 int입니다. 이 결과값을 메소드 호출한 쪽에서 변수에 담아 다른 일 처리에 사용할 수 있습니다.
int 변수이름 = 메소드이름();
무슨무슨처리...
배열을 매개변수로 갖는 메소드
메소드자료형 메소드이름(자료형 []배열이름){
}
예를 들어
int []a = {1,2,3,4,5};
라는 배열이 있고 이것을 매개변수로 받은 메소드을 만들어 보면
void pro(int []data){
}
이메소드를 호출하려면
pro(a)
라고 메소드호출시에 배열이름을 전달하면 됩니다.
이때 호출하는 배열이름과 메소드의 매개변수의 배열이름은 같아도 상관없고 달라도 상관없습니다
'프로그래밍 공부 정리 > java' 카테고리의 다른 글
객체와 클래스, 객체지향 프로그래밍 (0) | 2021.10.21 |
---|---|
아스키코드 (0) | 2021.10.20 |
다차원 배열 (0) | 2021.10.18 |
반복문: while문, do while문,for each반복문 (0) | 2021.10.17 |
Break와 Continue (0) | 2021.10.16 |