記錄

JAVA) 다차원 배열과 메모리구조 본문

Computer language/JAVA

JAVA) 다차원 배열과 메모리구조

surhommejk 2018. 2. 1. 12:21








주의할 점은 일차원 배열에서는 배열 변수의 주소값과 배열의 첫번째 요소의 주소값이 일치하지만 다차원 배열에서는 그렇지 않다는 점이다. (슬라이드 참고)


이유는 둘 이상의 주소값을 메모리의 한 공간에 담을 수 없고, 다차원 배열의 원리 자체가 '행의 집합'이기 때문이다.


즉, '행의 집합'을 실현하기 위해서 그 이전에 각 행의 주소값을 담아줄 공간이 필요하고 이것 때문에 다차원 배열 변수와 첫번째 요소(index: [0][0])의 주소값이 다른 것이다.



EX1) 클래스를 담는 배열 1

//EX) 클래스를 담는 배열 1

Employee[] emplist = {new Employee(1,"A","IT"),
                 new Employee(2,"B","IT"),
                 new Employee(3,"C","IT")};





EX2) 클래스를 담는 배열 2

class Triangle2 extends Shape{
    Point[] pointarray;
    public Triangle2() {
        this(new Point[]{new Point(1,2),new Point(3,4),new Point(5,6)});
    }
    public Triangle2(Point[] pointarray) {
        this.pointarray = pointarray;
    }
    public void triangePoint() {
        for(Point point : pointarray) {
            System.out.println("좌표: " + point.x + "," + point.y);
        }
    }
}

main에서 Triangle2(); 실행시


1) pointarray 빈공간 할당 (주소값은 아직)

2) 공간 3개짜리 배열(0xaaa)을 생성하고 각각의 new 3개 실행하여 주소값을 세 개의 방에 할당

3) Triangle2(Point[] pointarray) 생성자로 넘겨서 this.pointarray=pointarray가 실행되면서 1)에서 빈공간으로 남겨두었던 곳에 0xaaa가 들어간다


cf.

클래스 내에서 배열변수에 따로 할당을 하지 못했던 이유는

클래스는 변수와 메소드 정보만 담을 수 있는데


문제는 인덱스 요소 (ex: arr[0])는 변수도 아니고 메소드도 아니라서

arr[0] = new Point() 와 같은 것이 에러가 났던 것이다


main 함수 내에서는 잘 작동했던 이유는

'함수' 내 이기 때문에 작동 했던 것이다

Comments