본문 바로가기
study_java/java_수강정리(~10.29)

[JAVA]14일차

by developer_j 2020. 5. 31.
728x90
반응형

< 14일차 수업 >

 

1. 배열

배열 내용은 이전 게시글에 이어서 설명을 추가하고자 한다.

2020/05/27 - [JAVA/JAVA_수강정리] - [JAVA]13일차

 

[JAVA]13일차

< 13일차 수업 > 1.Scanner Scanner 클래스는 생성자로 전달되는 대상으로부터 데이터를 추출하는 기능을 제공한다. Scanner 클래스에 정의된 생성자 중 일부로 Scanne(File Source)/Scanner(StringSource)/Scanne..

turing0809.tistory.com

1차원 배열에 대해서는 13일차 수업 게시글에서 확인할 수 있다. 

배열은 '자료형이 같은 둘 이상의 값'을 저장할 수 있는 연속된 메모리 공간을 의미한다고 하였다. 이 공간은 2차원으로도 선언할 수 있다! 2차원 배열의 선언은 [] 칸을 하나 더 늘린다.

int[][] arr2 = new int[3][4];

위의 코드는 3행 4열의 배열이 만드는 것이라고 생각하면 된다.(실제 메모리는 연속된 공간을 잡긴 하지만 말이다.)

또한 arr2라는 이름이 배열 공간의 첫 주소를 담고 있는 것처럼, int[a][b] 배열에서 a칸의 메모리공간은 나머지 b열의 첫 주소값을 담는다. 글로 설명하자니 어렵다. 아래 그림을 참조하자.

 

발그림

원래 이해를 더 쉽게 하기 위해서 arr2[i]행도 가로로 표현하고 싶었지만.. 공간이 쓸데없이 늘어나서 포기..

어쨌든, 위 그림에서 강조하고 싶었던 점은 arr2[0]과 arr2[0][0]은 같은 위치이지만 각각이 표현하는 바가 다르다는 것이다. arr2[0]은 주소값을 담고 있고, arr2[0][0]은을 가지고 있다. 그래서 for문을 통해 2차원 배열을 사용할 때도, i가 0부터 배열의 길이까지라고 할 때 arr[i]의 길이는 행의 길이를 담고, arr[i][j]는 열의 길이를 담는다는 사실을 이용하여 구성한다.

 

게다가, 객체도 배열로 선언해 줄 수 있다. 객체의 배열은 2차원 배열과 구조가 비슷하다. 객체배열은 배열 방에 주소값을 저장하도록 공간을 만든다. 만약 주소값을 할당하지 않는다면 배열 방은 아무것도 담지 않기때문에, 만약 인스턴스 주소를 저장하기 전에 출력을 하게 되면 null값이 출력된다.

class Box{
	int num = 0;
}

public class TestPlace { 
		public static void main(String[] args) {
				Box[] box = new Box[3];
      
				System.out.println(box);
				//box 출력결과 - 주소값 : [Lreport.Box;@15db9742
                
                for(int i = 0; i<box.length; i++) {
					System.out.println(box[i]);
				}
				//box[0],[1],[2] 출력결과 - 배열 속 값 : 객체 생성 안했으니 null
      
				//System.out.println(box[0].num); 접근이 불가능하다.



				for(int i = 0; i<box.length; i++) {
					box[i] = new Box();
					System.out.println(box[i]);
				}
				//for문으로 배열 번호당 객체 생성해주니까 주소값이 출력됨
				//report.Box@6d06d69c
				//report.Box@7852e922
				//report.Box@4e25154f
                                                     
				System.out.println(box[0].num);
				//num 접근 가능
		}
}

2. for-each문

for-each문은 자바5때 추가되었다.  for-each문은 for문보다 코드를 더 간결하게 표현할 수 있다는 장점이 있다. 

class Box{
           public int num = 0;
}

public class TestPlace {
		public static void main(String[] args) {
				Box[] box = new Box[3];
					for(Box b : box) {		//요소길이만큼 순서대로 {}내용 반복후 종료
						b = new Box();
						System.out.println(b);
					}
		}

}
<결과>
report.Box@15db9742
report.Box@6d06d69c
report.Box@7852e922

for문과 for-each문의 차이는 무엇일까? for문은 반복을 진행하면서 반복을 유지할 조건식이 존재한다. 그러나 for-each문은 처음부터 끝까지 반복을 진행하되 제한하는 조건식은 없다. 즉, 무조건 처음부터 끝까지 수행만 할 뿐이다.

728x90
반응형

'study_java > java_수강정리(~10.29)' 카테고리의 다른 글

[JAVA]15일차(2)  (0) 2020.05.31
[JAVA]15일차  (0) 2020.05.31
[JAVA]13일차  (0) 2020.05.27
[JAVA]12일차  (0) 2020.05.26
[JAVA]11일차  (0) 2020.05.25