멤버(member)란 멤버 변수(member variable)와 멤버 메소드(member method)를 말합니다.
멤버 변수를 만드는 방법
<modifiers> <type> <이름>;
예)
public int var;
멤버 메소드를 선언하는 방법
<modifiers> <return_type> <이름> (아규먼트 목록) throws <exception> {
....
}
예)
public int func (int x, int y) {
...
}
메소드를 선언할 때 주의할 사항은 다음과 같습니다.
1. return type이 없을 경우에는 void 라고 씁니다.
2. 아규먼트가 없을 때는 void 라고 쓰지 않고 그냥 비워둡니다(C 언어와 다름).
// PassDopza.Java
public class PassDopza {
int pdValue(멤버 변수 이름) = 0;
public void changeInt(멤버 메소드 이름) (int value) {
value(로컬 변수 이름) = 55;
}
public static void main(멤버 메소드 이름) (String [] args) {
int var(로컬 변수 이름) = 7; // 로컬 변수 선언
PassDopza pd = new PassDopza(); // 새로운 객체(object)인 pd 만들기
pd.changeInt(var); // 멤버 메소드인 changeInt(var)를 호출
System.out.println(var);
}
}
위의 파일 PassDopza.Java에는 클래스 PassDopza가 존재합니다.
또한 멤버 변수인 pdValue와 멤버 메소드인 changeInt와 main이 있습니다.
위의 프로그램은 메소드 main 부터 시작됩니다.
메소드 main은 자기 몸 속에 자신을 만드는 특이한 코드로, 다른 메소드와는 근본적으로 다릅니다.
위에서 pd는 새로 생성된 객체(object)를 가리키는 참조변수(reference variable) 이름으로 이 변수가 객체를 대신한다고 생각하면 됩니다. 메소드 changeInt()를 호출하면서 로컬변수 값 7을 넘겼고, 넘겨진 값 7은 value라는 로컬변수에 저장됩니다.
이 value라는 변수는 scope이 local입니다(아규먼트는 무조건 local 변수임).
local scope의 변수는 그 수명이 메소드안에서만 지속되기 때문에 이 메소드 changeInt를 벗어나면 없어집니다.
메소드가 끝나면 변수 value는 없어집니다.
화면에 var를 출력하면 결과는 얼마일까요? 55 일까요?
아닙니다! 값은 7입니다. 왜 그럴까요? 55로 바꾸지 않았던가요?
C 언어를 해보았다면 pass by value라는 말을 알 것인데, 위의 경우가 pass by value 입니다.
즉, 호출된 메소드에서 아무리 값을 변경해도 값은 바뀌지 않습니다.
약간 변형된 다음의 예제를 봅니다.
1: // PassTest.Java
2: public class MyDate {
3: int year(멤버변수이름) = 1999;
4: int month;
5: int day;
6:
7: void setYear(int year) { //멤버 메소드
8: this.year(로컬변수) = year(넘어온 아규먼트);
9: }
10:
11: int getYear() { //멤버 메소드
12: return year;
13: }
14.
15: public static void main(String [] args) { //메인 메소드
16: int year(로컬변수) = 2000;
17: MyDate md = new MyDate(); // 객체 md 만들기.
18: md.setYear(year);
19: System.out.println(md.year);
20: }
21. }
15 line부터 프로그램이 시작됩니다.
16 line에서 로컬변수 year의 값은 2000 입니다.
17 line에서 생성자 MyDate()를 갖고 md라는 객체를 생성시킵니다.
18 line에서 생성된 객체(md)의 메소드인 setYear를 호출한 다음 아규먼트 값으로 2000을 넘깁니다.
7 line의 메소드 setYear로 프로그램의 제어가 넘어갑니다.
8 line에 있는 this라는 keyword는 자신인 객체 md를 가리키는 참조입니다.
즉 this.year란 3 line의 멤버 변수 year를 가리킵니다(현재 1999로 되어있는).
그 오른 쪽의 year는 넘어온 아규먼트인 2000이란 값을 가리킵니다.
이렇게 this.year라고 쓴 이유는 넘어온 아규먼트와 멤버변수의 이름이 같아서 구별하기 위해서 입니다.
line 8에서 'year = year;'라고 쓴다면 혼란이 생길 것입니다.
이렇게 this라는 keyword는 자신의 class가 아닌 자기 자신 객체를 가리키는데 사용됩니다.
'Java 배우기' 카테고리의 다른 글
"Hellow world!" 프로그램 (0) | 2016.01.04 |
---|---|
Modifier 접근제한자 (0) | 2016.01.04 |
Method 메소드 (0) | 2016.01.04 |
자바 쉬운 예제 (0) | 2016.01.04 |
참조 (reference)와 참조변수 (reference variable) (1) | 2016.01.03 |
댓글