본문 바로가기
Java 배우기

Member field(variable) method 멤버 필드(변수) 메소드

by 노화방지 Anti-aging Hairstyle 2016. 1. 4.
반응형

멤버(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

댓글