-> 블로그 이전

[Java] 객체 배열 / 메소드

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

728x90
반응형

객체 배열

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

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] + " ");
}

 

728x90
반응형