-> 블로그 이전

[Java] 객체 배열 / 메소드

2021. 11. 19. 14:39Language`/Java

객체 배열

- 객체에 대한 레퍼런스를 원소로 갖는 배열

class Circle{
int radius;
public Circle(int radiut){
this.radius = radius;
}
public double getArea(){
return 3.14*radius*radius;
}
}

 

1. 배열에 대한 레퍼런스 선언

- 배열의 크기를 지정하면 컴파일 오류 발생

Circle[] c;

 

2. 레퍼런스 배열 생성

c = new Circle[5];

 

3. 객체 생성

for(int i=0; i<c.length; i++)
c[i] = new Circle(i); // i번째 Circle 객체 생성

 

 

 

메소드의 활용

메소드 형식

- 메소드 : 클래스의 멤버 함수

- 메소드 앞에는 접근 지정자를 선언

 

 

인자 전달 방식 (Argument Passing)

1. 기본 타입의 값 전달

- 메소드의 매개변수가 기본 타입 (byte, char, short, int, long, float, double, boolean)으로 선언된 경우

  -> 호출자(Caller)가 건네는 값이 매개변수에 복사되어 전달

  -> 메소드의 매개변수 : 변경 O / 호출된 실제 인자의 값 : 변경 X 

.....
static void increase(int m){
m = m + 1;
}
}
public class abc {
public static void main(String[] args){
int n = 10;
increase(n); // static void increase(int m) 호출
System.out.println(n);
}

≫ increase(int m) 메소드 호출

≫ 매개변수 m 생성 + 10으로 초기화 -> 그리고 m 값 1증가

≫ main()메소드로 돌아오면 변수 n 값은 여전히 10 

 

2. 객체 전달

- 메소드의 매개변수가 클래스 타입인 경우

  -> 객체의 레퍼런스 값이 전달

.....
static void increase(Circle m){
m.radius++;
}
}
public class abc {
public static void main(String[] args){
Circle pizza = new Circle(10);
increase(pizza); // static void increase(Circle m) 호출
System.out.println(pizza.radius);
}

≫ increase(Circle m) 호출

≫ 매개변수 m생성 + pizza 변수에 저장된 값(레퍼런스)이 m에 복사

≫ m, pizza는 동일한 객체를 가리킨다

≫ m.radius++;에 의해 radius -> 11로 변경 

≫ increase() 종료 후에도 그대로 radius -> 11 

 

3. 배열 전달

- 메소드의 매개변수가 배열 타입인 경우

  -> 배열에 대한 레퍼런스만 전달

.....
static void increase(int[] array){
for(int i=0; i<array.length; i++){
array[i]++;
}
}
}
public class abc {
public static void main(String[] args){
int a[] = {1, 2, 3, 4, 5};
increase(a);
for(int i=0; i<a.length; i++)
System.out.print(a[i] + " ");
}