1.객체의 필드의 참조
- 객체의 필드들은 필드명에 의하여 접근된다.- 외부의 코드는 반드시 객체레퍼런스(object reference), 필드명을 사용해야 한다.
- 예)
Class Rectangle {
int width;
public Rectangle(int w) {
width=w; //내부에서 width필드의 접근.
}
}
Class B {
public static void main (String args[]) {
Rectangle rect = new Rectangle(100);// width 초기화
Int length = rect.width; // 외부에서 width 필드의 접근
}
}
- 객체 참조를 통한 instance필드의 효출은, 특정한 객체의 필드 호출을 의미한다.
- 그밖에, 객체의 접근을 위하여, new 연산자가 반환하는 object reference값을 바로 사용할 수 있다.
이 경우, 프로그램은 객체의 reference를 갖지 않게 되므로, 이 객체는 Garbage Collection의 대상이 된다.
예) int width = new Rectangle(100).width;//
2.객체의 메서드 호출
- 객체의 instance 메서드를 호출하기 위해서objectReference,메서드명(인수)을 사용해서 호출
- 예)
Class Rectangle {
...
public Area getArea() {
return area;
}
}
Class B {
public static void main (String args[]) {
}
}
- 오브젝트레퍼런스를 통한 instance메서드의 호출을,특정한 object의 메서드의 호출을 의미한다.
- 이회에, 필드와 마찬가지로 객체의 접근을 위하여 new 연산자가 반환하는 object reference값을 바로 사용할 수 있다.
예) Int area = new Rectangle(100).getArea();//
3. Gargage Collection
- 객체가 더이상 사용되지 않고 있다는 것이 확정될때, JRE 가 그 객체를 삭제하는 프로세스.- 객체는 자신을 가리키고 있는 어떠한 reference도 없을때 garbage collection에 대한 대상이 된다.
- 객체의 reference가 끊어지는 때는
1) reference를 보유하고 있던 참조변수가 자신의 scope을 벗어날때(지역변수)
2) 참조변수에 null값을 대입할때.
- JRE 의 Garbage collector는
reference가 없는 객체들을 메모리로부터 제거한다.
메서드로부터 값의 반환
- 메서드가 자신을 호출했던 곳으로 복귀하는 경우- 메서드에 있는 모든 문들의 실행을 완료했을때
- return 문에 도달했을때.
- 예외를 던질때
- 메서드 선언문에서 반환할 값이 있는 경우 반환할 자료형을 명시하였는데, 메서드의 body내에서 값을 반환하기 위하여 return문을 사용한다.
- void 로 선언된 메서드도, return문을 사용할 수 있다.
- return값의 자료형은 메서드에서 선언된 반환 자료형과 일치되어야 함
(단, 자동형병환, subclass는 예외)
- 메서드가 참조데이터형을 반환하는 경우는, 반환되는 자료형의 class는 메서드의 반환자료형과 동일한 class이거나, 또는 subclass 일수 있다.(다형성)
메서드 또는 생성자에 정보전달 :참고
1) 기본형 자료의 전달.
2) 참조형 자료의 전달.
- 매개변수의 값에 대한 변경은,. 그 메서드의 scope에서만 유지되고, 메서드가 복귀할때 매개변수와 어떤 변경들도 모두 사라진다.
- 예)
class MyUtil {
void swap(int a, int b) {
int temp = a;
a=b; b=temp; //a 와 b 의 swap 은 메서드의 복귀후에는 유효하지 않음.
return;
}
}
- 전달되는 reference값은 동일한 객체를 참조.2) 참조형 자료의 전달.
기본형 자료의 전달
- call by value 로 전달.- 매개변수의 값에 대한 변경은,. 그 메서드의 scope에서만 유지되고, 메서드가 복귀할때 매개변수와 어떤 변경들도 모두 사라진다.
- 예)
class MyUtil {
void swap(int a, int b) {
int temp = a;
a=b; b=temp; //a 와 b 의 swap 은 메서드의 복귀후에는 유효하지 않음.
return;
}
}
참조형 자료의 전달
- call by reference 로 전달.- 그러므로, 매개변수의 reference 가 가리키는 객체의 필드에 대한 변경은, 메서드가 복귀한 후에도 유지된다.
- 예)
class MyUtil {
void swap(MyNums num) {
int temp = num.a;
num.a=num.b; num.b=temp; //MyNum의 a 와 b 의 swap 은 메서드의 복귀후에도 유지됨.
return;
}
}
=======================================
가변인자
- 메서드를 호출할때 전달하는 인자의 갯수가 정해져 있지 않음.(sdk5 부터) -- 타입은 동일- 일반적으로, 메서드의 매개변수의 갯수와 메서드 호출시 전달되는 인자의 갯수는 동일해야 함.
- 형식 : 반환자료형 메서드명(매개변수타입... 변수명) {
... // 매개변수를 배열로서 사용.
}
- 예)
//가변인자를 갖는 메서드의 정의
public static void foo(int ... nums)
{
for(int num : nums)
{
System.out.print(num);
}
System.out.println();
System.out.printf("The last number of list is %d\n", nums[nums.length - 1]);
}
public static void main(String [] args
{//메서드의 호출
foo(1); //1개의 숫자 전달
foo(1, 2, 3);//3개의 숫자 전달
foo(1, 2, 3, 4, 5);//5개의 숫자 전달
}
----------------
public static void print(String ... args) { //
for(int i=0; i< args.length;i++) {
System.out.println(args[i]);
}
}
//메서드의 호출print("a","b","c"); //3개의 문자열 전달.
print("a","b"); //2개의 문자열 전달.
print("a"); //1개의 문자열 전달.
@실습 : 인수전달방식 테스트 ArgsTest.java (p156)
@VariableArgument.java(p162)
댓글 없음:
댓글 쓰기