


=>
하나의 묶음으로 보기 . 따로따로 존재하는게 아니라 , 나란히 할당 되는 것 !
이후
, 이 배열의 참조값 주솟값 이 반환되어서 ref 라는 참조변수가 이를 참조하게 된다 .
< ArrayIsInstance >
public class ArrayIsInstance {
public static void main(String args[]) {
// 길이가 5인 int형 1차원 배열의 생성
int[] ar1 = new int[5];
// 길이가 7인 double형 1차원 배열의 생성
double[] ar2 = new double[7];
// 배열의 참조변수와 인스턴스 생성 분리
float[] ar3;
ar3 = new float[9];
// 배열의 인스턴스 변수 접근
System.out.println("배열 ar1의 길이 "+ ar1.length);
System.out.println("배열 ar2의 길이 "+ ar2.length);
System.out.println("배열 ar3의 길이 "+ ar3.length);
}
}
< 출력 >
배열 ar1의 길이 5
배열 ar2의 길이 7
배열 ar3의 길이 9
* 인스턴수 변수 length에 접근하여 배열의 길이 정보 출력 -> 인스턴수 변수에 접근이 가능하다는 것은 배열이 인스턴스임을 보이는 결과 !
Ex) 1차원 배열의 참조변수는 배열의 길이에 상관없이 참조 가능 예
public static void main(string args[] ) {
int [] ar = new int[50];
System.out.println(”length : “ + ar.length); // length : 50
ar = new int[100]; // 길이가 다른 배열 참조
System.out.println(”length : “ + ar.length); // length : 100
< ArrayIsInstance2 > - 자료형 대상이 아닌 클래스의 인스턴스를 대상으로 배열 선언 예시
class Box { // Box 클래스 정의
private String conts;
Box(String cont) {
this.conts = cont;
}
public String toString() {
return conts;
}
}
public class ArrayIsInstance2 {
public static void main(String args[]) {
Box[] ar = new Box[5]; // 길이가 5인 Box형 1차원 배열의 생성
System.out.println("length : " + ar.length); // length : 5
} // Box인스턴스를 다섯개 저장할 수 있는 배열을 생성해라 !
}
< 출력 >
length : 5
* Box인스턴스 5개 저장할 수 있는, 즉 Box형 참조변수 다섯개로 이루어진 배열 생성.
이 인스턴스의 참조값이 반환돼서 ar이 참조하게 된다.
-> “ 이는 Box 인스턴스 5개를 저장할 수 있는 참조변수의 배열이다 “
* 형 [ ] - > '형' 자리에 무엇이든 올 수 있음. 기본 자료형의 이름뿐만아니라 우리가 정의하는 클래스의 이름도 올 수 있다 !

< BoxArray > Box형 인스턴스 저장 및 참조 방법도 유사 ( 저장 대상 차이 )
class Box{
private String conts;
Box(String cont) {
this.conts = cont;
}
public String toString() { //conts가 가지고 있는 문자열의 참조값, 즉 String형 인스턴스의 참조값을 반환
return conts;
}
}
public class BoxArray {
public static void main(String args[]) {
Box[] ar = new Box[3];
// 배열에 인스턴스 저장. *이렇게 저장가능하다 !
ar[0] = new Box("First"); // Box인스턴스에 문자열을 가지고 있는 것
ar[1] = new Box("Second");
ar[2] = new Box("Third");
// 저장된 인스턴스의 참조. * 이렇게 참조가능하다 !
System.out.println(ar[0]); // -> 인자로 전달된 인스턴스의 toString 메소드를 호출해서 그 때 반환되는 문자열을 출력
System.out.println(ar[1]);
System.out.println(ar[2]);
}
}
< 출력 >
First
Second
Third



< 배열을 생성과 동시에 초기화 >
- 생성
* int [ ] arr = new int[ 3 ];
- 초기화
* int [ ] arr = new int [ 3 ] { 1, 2, 3 }; // 컴파일 오류 발생
-> 이 배열을 초기화 하고자 하는 값을 쓸 수가 있음. 생성자가 동시에 지정해준 값으로 초기화
But) 위 문장에서는 초기화할 값들의 수를 통해 배열의 길이 정보를 계산할 수 있으므로, 이 경우 '배열의 길이 정보를 생략하도록 약속'함.
( 수정 필요. 이렇게 써줘야함 ! )
* int [ ] arr = new int [ ] { 1, 2, 3 } ; // 생성되는 배열의 길이는 3
(생략 가능)
-> 배열의 길이 정보를 컴파일러가 알아서 계산해서 넣어줌.
★ ( 줄여서 표현 )
* int [ ] arr = { 1, 2, 3 } ; // 생성되는 배열의 길이는 3
* 참조변수 선언의 두 가지 방법 ( 둘 다 동일한 의미로 사용 )
int [ ] ar = new int [ 3 ] ; // 조금 더 선호하는 방법
int ar [ ] = new int [ 3 ] ; // 이것도 된다 !
* main 메소드에서 만들었다고 main 메소드에서만 접근 가능한 것이 아니다.
참조값을 가지고 있으면 누구나 접근이 가능하며, 참조값을 주고 받는 것이 가능하다 .
( 배열의 특성 )

class Main {
public static void main(String args[]) {
int[] arr = {1, 2, 3, 4, 5, 6, 7}; // 길이가 7인 배열 생성
int sum = sumOfArray(arr); // int형 변수 sum에 배열의 참조값 저장
System.out.println(sum);
}
// 매개변수 선언 위치에도 참조변수 선언이 올 수 있음.
// int형 배열의 참조값이 전달
static int sumOfArray(int [] arr) { // int형 배열의 참조값이 전달
int sum = 0; // sum 변수를 0으로 초기화
for(int i = 0; i < arr.length; i++) // 배열의 길이만큼 반복
sum += arr[i]; // 배열의 인자를 sum에 더함
return sum;
}
}


EX) ar -> 특정값으로 초기화를 안해서 다 0으로 저장되어 있다고 가정. 그러면 이 배열이 다 3으로 채워진다 !


< ArrayUtils >
import java.util.Arrays;
public class ArrayUtils {
public static void main(String args[]) {
int[] ar1 = new int[10];
int[] ar2 = new int[10];
Arrays.fill(ar1, 7); // 배열 ar1을 7로 초기화
System.arraycopy(ar1, 0, ar2, 3, 4); // 배열 ar1을 ar2로 부분 복사
for(int i = 0; i < ar1.length; i++)
System.out.print(ar1[i] + " ");
System.out.println(); // 단순 줄 바꿈
for(int i = 0; i < ar2.length; i++)
System.out.print(ar2[i] + " ");
}
}
< 출력 >
7 7 7 7 7 7 7 7 7 7
0 0 0 7 7 7 7 0 0 0



13-2 enhanced for문 ( for-each문 이해 )
< enhanced for문 이해와 활용 >
* '배열'이 등장 -> 여지없이 등장하는 것이 'for문' -> ' 배열 요소의 순차적 접근을 위해 등장 '
--> 좀 더 간단하게 줄여서 할 수 있는 방법 제공 ( enhanced for문)
* 프로그램을 작성하다 보면 배열에 저장된 모든 요소를 대상으로 연선, 참조 또는 탐색 진행하는 경우 흔히 볼 수 있음.
“ 배열에 저장된 값 중에서 특정 조건에 해당하는 값을 찾아라. “
“ 배열에 저장된 모든 값에 대해 12%씩 그 값을 증가시켜라 “
--> 이를 돕기 위해 등장한게 'enhanced for문' (for-each문)
EX) '배열에 저장된 모든 값을 출력하라' 의 for문 작성
- 코드의 특징 : 배열 요소의 순차적 접근



< EnhancedFor > ' for문 < - > for - each 문서로 바꾸는 연습해보기 !
public class EnhancedFor {
public static void main(String args[]) {
int[] ar = {1, 2, 3, 4, 5};
// 배열 요소 전체 출력 -> 순차적 저장 후 실행
for (int e : ar) {
System.out.print(e + " ");
}
System.out.println(); // 단순 줄 바꿈
int sum = 0;
// 배열 요소의 전체 합 출력
for (int e : ar) {
sum += e;
}
System.out.println("sum: " + sum);
}
}
< 출력 >
1 2 3 4 5
sum: 15
'Java' 카테고리의 다른 글
| JAVA Programming(Ch 15. 메소드 오버라이딩) (0) | 2021.08.09 |
|---|---|
| JAVA Programming(Ch 14. 상속) (0) | 2021.08.09 |
| JAVA Programming(Ch 12.콘솔 출력) (0) | 2021.08.09 |
| JAVA Programming(Ch 11. 메소드 오버로딩) (0) | 2021.08.08 |
| JAVA Programming(Ch 10. 클래스 변수) (0) | 2021.08.08 |