본문 바로가기

BackEnd/Java

0919 JAVA - 배열 (Array) - 2

728x90
반응형

< 배열 선언, 생성, 초기화를 한꺼번에 수행하는 문법 >

 


 데이터타입[] 변수명 = new {데이터1, 데이터2 ... , 데이터n}


 => 배열 생성 문법을 별도로 명시하지 않고,
    중괄호를 사용하여 초기화할 데이터를 리터럴 형태로 전달하면
    해당 데이터 개수만큼 배열 공간이 자동으로 생성됨
 => n개 만큼의 공간을 생성하면서 인덱스 번호가 0~n-1까지 부여되고 
    자동으로 기본값으로 초기화 
     

 int[] arr =new int[5];
 arr[0] = 1;
 arr[1] = 2;
 arr[2] = 3;
 arr[3] = 4;
 arr[4] = 5;



위의 문장들을 하나로 결합하여 리터럴로 즉시 초기화까지 수행 


int[] arr = {1,2,3,4,5};
 => 주의! 5개의 리터럴 지정 시 5개 데이터 저장 공간만 생성되므로 
    추가적인 데이터 저장은 불가능하게 됨! 

 


배열 arr의 모든 요소 출력

for(int i =0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("-----------------------------------------");




int 형 배열 arr2를 먼저 선언 한 후
별도로 정수 리터럴 1,2,3,4,5 로 한꺼번에 초기화 하는 경우 

 

int [] arr2; 
 arr2 = new int[5]; //배열 생성 문장 사용 시 
 arr2 = {1,2,3,4,5}; //오류 발생! 별도로 초기화 시 사용 불가능!
=> new 키워드를 사용하는 방법과 결합하여 문법을 지정해야함 
arr2 = new int[] {1,2,3,4,5};


=> 주의! 배열의 크기는 지정하지 않도록 한다!


String 타입 문자열 데이터 3개 ("Java", "JSP", "Android")를 저장하는
배열 strArr 을 생성하고 리터럴로 즉시 초기화까지 수행 후 출력 

 

String[] strArr = {"Java", "JSP", "Android"};
for(int i =0; i<strArr.length; i++) {
System.out.println(strArr[i]);
}


int[]a = {1,2,3};
int[]b = {4,5,6};
int[]c = {7,8,9};



a = b;

b의 주소값을 a에 저장 
기존에 a가 가리키던(참조하던) 1,2,3저장 공간을 버리고 b가 가리키는 4,5,6 저장 공간의 주소값을 전달받아 참조하게 됨
이 때, 기존 1,2,3 저장 공간은 더 이상 참조되지 않으므로 불 필요한 메모리 공간이 되어 Garbage Collector 에 의한 정리 대상이 됨


 => 즉, 더 이상 필요없는 메모리 공간은 자동으로 정리됨 

더보기

Garbage Collection(가비지 컬렉션)이란?

쓰레기 수집은 동적 할당된 메모리 영역 가운데 더 이상 사용할 수 없게 된 영역을 탐지하여 자동으로 해제하는 기법이다. 더 이상 사용할 수 없게 된 영역이란, 어떤 변수도 가리키지 않게 된 영역을 의미한다.

 

자바, C#, 그리고 일부 스크립트 언어들은 처음부터 쓰레기 수집 기법을 염두에 두고 설계되어, 언어 정의에 쓰레기 수집이 포함되어 있다.

 

 C, C++ 등의 프로그래밍 언어는 수동 메모리 관리를 가정하고 설계되었으나, 쓰레기 수집을 지원하는 구현도 존재한다. D와 같은 어떤 언어들은 쓰레기 수집을 지원하지만, 필요에 따라 쓰레기 수집을 하지 않고 수동으로 메모리를 관리할 수 있다.

 

 

 

 



b = c;

c의 주소값을 b에 저장 
기존에 b가 참조하던 4,5,6 저장 공간을 버리고 c가 가리키는 7,8,9 저장 공간의 주소값을 전달받아 참조
이 때, 기존 4,5,6 저장 공간은 여전히 a에 의해 참조되고 있으므로 Garbage Collector 에 의한 정리 대상이 아니다! 


배열 내의 데이터에 대한 연산 누적 
  0. 연산을 누적할 변수 선언 및 초기화 
  1. 배열 생성 및 데이터 저장 
  2. for 문을 사용하여 배열 내의 모든 인덱스에 차례대로 접근 
     => 배열의 인덱스 번호를 제어변수로 지정하여 
        해당 배열 내의 데이터를 누적 변수에 누적 
  3. for 문 종료 후 누적 변수 값을 사용 
   




0. 합계를 누적할 누적변수(int 형 변수 total) 선언 및 초기화
int total = 0;

1. 정수형 데이터 1~10까지 저장하는 배열 arr 생성
int[] arr = {1,2,3,4,5,6,7,8,9,10};

2. for 문을 사용하여 배열 내의 모든 인덱스에 차례대로 접근
for(int i =0; i<arr.length;i++) {
System.out.println(arr[i]); //배열 내의 모든 데이터 출력

배열 내의 모든 데이터를 차례대로 total 변수에 누적 
total +=arr[i]; //배열 arr의 i번 인덱스 데이터를 total에 누적 
}


3. 누적 변수 (합계) 출력
System.out.println(total);


int oddTotal = 0;

 홀수의 합을 누적할 변수

int evenTotal = 0; 

 짝수의 합을 누적할 변수 

배열 내의 모든 인덱스에 차례대로 접근
 => 이 때, 각 인덱스 데이터가 홀수, 짝수 일 때 각 각의 변수에 누적 

 

for(int i = 0; i<arr.length;i++) {
if(arr[i]%2==1){
oddTotal += arr[i];
//if - 홀수 이면, oddTotal에 저장 
}else if(arr[i]%2==0) {
evenTotal += arr[i];

}

System.out.println(" 홀수의 합은 : " + oddTotal);
System.out.println(" 짝수의 합은 : " + evenTotal);

//else if - 짝수 이면, evenTotal에 저장 
}
}

 

 

문제


int 형 배열 공간 5개를 생성(arr)하고 임의의 정수 5개로 초기화 한 후 출력 
 int[] arr;
 arr = new int[5];
int[] arr = new int[5];

arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

for(int i =0;i <arr.length;i++) {
System.out.println(i + "번 인덱스 데이터 :" + arr[i]);
}

 


boolean 타입 배열 3개 생성하고 임의의 boolean 타입 데이터초기화 후 출력
2번 인덱스만 true 값을 초기화
boolean[] arr2 = new boolean[3];

arr2[2] = true;

// 0번 1번 인덱스를 초기화하지 않을 경우 기본값 false 로 자동으로 초기화 

for(int i = 0; i<arr2.length;i++) {
System.out.println(i + "번 인덱스 데이터 : " + arr2[i]);
}

String 타입 배열 3개를 생성하고
0번 "홍길동", 1번 "이순신" 문자열로 초기한 후 출력 
String[] arr3 = new String[3];
arr3[0] = "홍길동";
arr3[1] = "이순신";

for(int i = 0; i<arr3.length;i++) {
System.out.println(i + "번 인덱스 데이터 : " + arr3[i]);
}

Double 타입 배열 5개를 저장하는 배열 arr4 생성 후 
임의의 4개의 실수로 초기화 한 후 전체 데이터 차례대로 출력 
double[] arr4 = new double[5];

arr4[0] = 1.1;
arr4[1] = 2.2;
arr4[2] = 3.3;
arr4[3] = 4.4;

for(int i = 0; i<arr4.length;i++) {
System.out.println(i + "번 인덱스 데이터 : " + arr4[i]);
}







 

728x90
반응형

'BackEnd > Java' 카테고리의 다른 글

0921 JAVA - PASS BY , this 키워드  (1) 2022.09.21
0921 JAVA - Variable  (1) 2022.09.21
0919 JAVA - 배열 (Array) - 1  (1) 2022.09.19
0919 JAVA - constructor_overloading 생성자 오버로딩  (0) 2022.09.19
0908 JAVA - Constructor  (1) 2022.09.10