[Java] 클래스(class) - 인스턴스 메소드 (instance method), this 문법
클래스 - 인스턴스 메소드
예제)
class Student {
String name;
int[] scores = new int[3];
int total;
float aver;
// 이렇게 클래스 블록 안에 묶여서 호출할 때마다 클래스 이름으로
// 호출해야 하는 메서드를 "클래스 메서드(=스태틱 메서드)"라 부른다.
public void init(Student s, String name, int kor, int eng, int math) {
s.name = name;
s.scores[0] = kor;
s.scores[1] = eng;
s.scores[2] = math;
}
public void compute(Student s) {
s.total = s.scores[0] + s.scores[1] + s.scores[2];
s.aver = s.total / 3f;
}
public void print(Student s) {
System.out.printf("%s, %d, %d, %d, %d, %f \n",
s.name, s.scores[0], s.scores[1], s.scores[2], s.total, s.aver);
}
}
=> class Student 안에 static이 붙지 않은 init(), compute(), print()과 같은 메서드를 "인스턴스 메서드"라 부른다.
ex) 위 클래스에서 init 메서드를 호출하는 코드
Student s1 = new Student();
Student.init(s1, "홍길동", 100, 100, 100);
=> init(), compute(), print() 함수는 모두 Student 인스턴스(s)를 파라미터로 넘겨서 그 인스턴스에 값을 저장해 사용하고 있다. 그러나 이런 Student 인스턴스를 쓰지 않고 사용할 수 있는 문법이 있는데, 그것이 바로 this 문법이다.
=> 메서드 앞에 놓은 인스턴스 주소를 메서드 안에서 어떻게 사용할까?
- 인스턴스 주소가 그 메서드의 내장 변수 this에 자동 저장된다.
위 예제를 다음과 같이 바꿀 수 있다!
클래스 - this의 사용
예제)
class Student {
String name;
int[] scores = new int[3];
int total;
float aver;
// => static이 붙지 않은 메서드를 "인스턴스 메서드"라 부른다.
// => 인스턴스 메서드는 호출할 때 반드시 인스턴스 주소를 줘야 한다.
// 예) 인스턴스주소.메서드명();
// => 이렇게 메서드를 호출할 때 앞에 놓인 인스턴스의 주소는
// 그 메서드의 내장 변수 this에 자동 보관된다.
public void init(String name, int kor, int eng, int math) {
this.name = name;
this.scores[0] = kor;
this.scores[1] = eng;
this.scores[2] = math;
}
public void compute() {
this.total = this.scores[0] + this.scores[1] + this.scores[2];
this.aver = this.total / 3f;
}
public void print(Student2 s) {
System.out.printf("%s, %d, %d, %d, %d, %f \n",
this.name, this.scores[0], this.scores[1], this.scores[2], this.total, this.aver);
}
}
=> 이렇게 클래스에 정의한 인스턴스 메소드를 호출할 때는 main () 에서
Student s1 = new Student();
s1.init("홍길동", 100, 100, 100)
무엇이 변화했는가?
Student s1 = new Student();
Student.init(s1, "홍길동", 100, 100, 100);
위 코드가
Student s1 = new Student();
s1.init("홍길동", 100, 100, 100)
이렇게 직관적이고 간결하게 바뀌었다.
'Programming > java' 카테고리의 다른 글
[Java] 스태틱 블록 (static block), 인스턴스 블록 (instance block), 생성자 (1) | 2017.05.11 |
---|---|
[Java] 클래스 변수의 개념과 예제 (0) | 2017.05.10 |
[Java] 인스턴스 변수의 개념과 예제 (0) | 2017.05.10 |
[Java] 클래스 로딩과 메모리 영역 (stack, heap, method area) (0) | 2017.05.10 |
[Java] 생성자(constructor) 개념과 예제 (0) | 2017.05.10 |