gi_dor

[Java] CH5 배열 본문

First/Java

[Java] CH5 배열

기돌 2023. 1. 15. 01:06
728x90

 

1. 배열 이란?

배열은 같은 타입의 여러변수를 하나의 묶음으로 다루는것 
▪ 많은 양의 데이터를 저장하기 위해서 
    ex) 10000개의 데이터를 저장하기위해 변수 10000개를 선언하기 힘들다.. 
           int score1, score2 , score3 , score4, score5 score6 score7;......

int [ ] score = new int [ 5 ] ;   // 5개의 int값을 저장할수 있는 배열 
▶ score [0] .score[1] ,score[2] , score[3], score[4]  // 0부터 4까지의 모두 5개

2. 배열의 선언과 생성

2 - 1 배열의 선언

원하는 타입의 변수를 선언하고  변수 또는 타입에 배열임을 의미하는 대괄호 [ ] 를 붙이면된다 
대괄호는 [ ] 타입 뒤에 붙여도 되고 변수 이름 뒤에 붙여도 된다
대괄호가 변수 이름의 일부라기 보다는 타입의 일부라고 보기 때문
선언방법 선언  예
타입 [ ]  변수이름; int [ ] score;
String [  ]  name; 
타입 변수이름[  ] ; int score [ ];
String name [ ];

 

2 - 2 변수의 생성 

배열을 선언한 다음에는 배열을 생성해야한다 배열을 선언하는 것은 단지 생성된 배열을 
다루기위한 참조변수를 위한 공간이 만들어질 뿐
배열을 생성해야만 값을 저장할 수있는 공간이 만들어 지는 것이다.
배열을 생성하기 위해서는 연산자 'new' 와 함께 배열의 타입과 길이를 지정해주어야한다
타입 [ ] 변수이름;          // 배열의 선언 (배열을 사용하기 위한 참조변수 선언)
변수이름 = new 타입 [ 길이 ] ;   // 배열을 생성  (실제 저장공간을 생성)

int [ ]  score ;  // int 타입의 배열을 다루기 위한 참조변수 score선언
score = new int [5] ; // int 타입의 값 5개를 저장할수 있는 배열 생성 
 
▶▶  int [ ] score = new int [ 5 ];        // 배열의 선언과 생성을 한번에
 score[0] , score[1] , score [2] ,score [3] , score [4]  총 5개

 

3. 배열의 인덱스

생성된 배열의 각 저장공간을 ' 배열의 요소 ' 라고 하며 
'배열이름 [인덱스] '의 형식으로 배열의 요소에 접근한다
인덱스는 배열의 요소마다 붙여진 일련번호로  각 요소를 구별하는데 사용된다
변수 이름을 지을 때 score1, score2, score3과 같이 번호를 붙이는 것과 비슷하다고 할수 있다 
다만 인덱스는 1이 아닌 0부터 시작함

▶ " 인덱스의 범위는 0 부터 ' 배열길이 - 1 ' 까지 "

Ex) 길이가 5인 배열은 모두 5개의 요소 (저장공간)를 가지며 인덱스의 범위는 1 ~ 5가 아닌 0 ~4 까지
0 ,1 , 2 , 3 , 4 가 된다

 

 

 

4. 배열의 길이 

자바에서 자바가상머신 (JVM)이 모두 배열의 길이를 별도로 관리하며 ,
'배열이름 .length' -  배열의 길이  (int 형 상수)

▪ int [ ] arr = new int[ 5 ];  // 길이가 5인 int배열
▪ int   tmp = arr. length ;   // arr.length의 값은 5이고 tmp에 5가 저장된다


▶ 위 코드에서 배열 arr의 길이가 5이므로 arr.length의 값은 5가 된다

배열은 한벙 생성하면 길이를 변경할수 없다, 이미 생성된 배열의 길이는 변하지 않는다
이로인해 '배열이름 .lenth' 는 상수다
값을 읽을수만 있고 변경할수는 없다!

 

5. 배열의 초기화

배열의 각 요소에서 처음으로 값을 저장하는 것


배열은 생성과 동시에 자동적으로 기본값(0)으로 초기화되므로 배열을 사용하기 전에
초기화를 해주지 않아도 된다
다만, 원하는 값을 저장하려면 각 요소마다 값을 지정 해줘야 한다.

Ex1)

int [ ] score = new int [5];       // 길이가 5인int형 배열 생성
score[0] = 50;                        // 각 요소에 직접 값을 저장
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;

Ex 2)  배열의 길이가 큰경우 요소하나하나에 값을 지정하지말고
for문을 사용하기  // 일정 규칙 있어야 사용가능

int [ ] score = new int [ 5 ];     // 길이가 5인 int형 배열 생성

for (int i = 0; i < scocre.length; i++)
score [i] =   i  * 10 + 50;

 

Ex 3) for문으로 배열을 초기화 하려면 저장하려는 깂이 일정한 규칙이 있어야 하능하기 때문에 
다음과 같이 배열을 가단히 초기화 할수있는 방법을 제공한다

int [ ] score = new int [ ] { 50 , 60 , 70, 80 , 90};     // 배열 생성과 초기화를 한번에

int [] score = {50 , 60 , 70 , 80, 90};   // new int [ ] 생략 할수 있음  , 주로 사용 

// 두줄로 나누기 불가능 , 에러발생

 Ex 4 )

int [ ] score ;                // 두문장으로 나누면 에러 발생  한문장으로 써야함
score = { 50 , 60 , 70 , 80 , 90 };       // 에러 new int[] 생략 불가



score = new int [] { 50 , 60 , 70 ,80 ,90 );      // ok

 

 


1. 배열의 출력

배열을 초기화 할 떄 for문을 사용 하듯이 , 배열에 저장된 값을 확인할 때도 for문을 사용하면된다
int [ ] iArr = { 100, 95, 80 , 70 , 60} ;     // iArr.length 의 값은 5 

for (int i = 0; i < iArr.length; i++) {  // 배열의 요소를 순서대로 하나씩 출력
    	System.out.println(iArr[i]);
}


▪ println 메서드는 출력후 줄 바꿈을 하므로 여러줄에 출력되어 보기 불편할 때 에는 print 메서드 사용

 

▪ char 배열
char배열은 println() 메서드로 출력하면 구분자 없이 출력되는데 char배열 일때만 이렇게 작성됨

char [ ] caArr = {'a', 'b', 'c' , 'd'};
System.out,println(chArr);   // abcd 가 출력됨

2. 배열의 활용 (1)

1) 총합 , 평균

2) 최소값 최대값

▶ 배열의 첫번째 요소 score [0]의 값으로 최대값을 의미하는 max와 최소값 min
▶ 반복문 for 으로 배열 두번째 요소 score[1] 부터 amx와 비교 하기시작 
    만약 배열에 담긴 값이 max에 저장된 값보다 크면 max에 저장



3) 섞기  (shuffle)

▶ 길이가 10인 배열 numArr 생성하고 0 ~ 9 의 숫자로 차례대로 초기화해서 출력
▶ random() 을 이용해 배열의 임의의 위치에 있는 값과 배열의 첫번째 요서 'numArr[0]'의 값을
  교환하는 일을 100번 반복해 배열의 요소가 섞이게함

 

4) 로또 번호 만들기

▶ 길이가 45인 배열에 1 ~ 45까지의 값을 담은 다음에 반복문을 이용해 배열의 인덱스가 i인 값(lotto)과 random()에 의해
    결정된 임의의 위치에 있는 값과 자리를 반꾸는 것을 6번 반복함
▶ 1 부터 45까지의 번호가 쓰인 카드를 잘 섞은 다음 맨위 6장을 꺼내는 것과 같다.
▶ 45개의 요소 중에서 앞에 6개의 요소만 임의의 위치에 있는 요소와 자리를 바꾸면 된다.


 

1. String 배열의 선언과 생성

배열 타입 String 경우 int 배열의 선언과 생성 방법이 같다
3개의 문자열을 담을 배열을 생성

String [] name = new String[3];

3개의 String타입의 참조 변수를 저장하기위한 공간이 마련되고 참조형 변수의 기본값은 null 이므로
각 요소의 값은 null로 초기화

2. String 배열의 초기화

// 배열의 각 요소에 문자열 지정

String [] name = new String[3];  // 길이가 3인 String배열 생성 0,1,2
name[0] = "kim";
name[1] = "Han";
name[2] = "Un";

// { } 를 사용해서 한번에 초기화

String [] name = { "kim" , "Han" , "Un"};    // new String [] 생략

 

String [] name = new String [3];
name[0] = new String ("Kim");
name[1] = new String ("Han");
name[2] = new String ("Un");



String [] name = new String [3];
name[0] = "Kim";
name[1] = "Han";
name[2] = "Un";

3. 2차원 배열

앞에서 배운 배열은 1차원 배열인데 2차원 이상의 배열 , 다차원 배열도 선언해서 사용 할수있다
메모리의 용량이 허용하는 한 차원의 제한은 없지만 주로 1,2차원 배열이 사용되므로 
2차원 배열을 이해한다면 3차원 이상의 배열도 쉽게 다룰수 있다.

2차원의 배열을 선언하는 방법은 1차원 배열과 같다 다만, 대괄호 [ ] 가 하나 더 들어간다

선언방법 선언 예시
타입 [ ] [ ] 변수이름; int [ ] [ ] score;
타입 변수이름  [ ] [ ] ; int score [ ] [ ];
타입 [ ] 변수이름 [ ]; int [ ] score [ ] ;

▶ 3차원 이상의 고차원 배열의 선언은 대괄호  [ ] 개수를 차원의 수만큼 추가해 주면 된다.

3 - 1
2차원 배열의 인덱스

2차원 배열은 주로 테이블 형태의 데이터를 담는데 사용되며 4행 3열의 데이터를 담기위한 배열은
▶ int [ ] [ ]  score = new int [4] [3];   // 4행  3열 의 2차원 배열 생성
▶ 총 12개의 int값을 저장할수 있는 공간이 생긴다

[0][0] [0][1] [0][2]
[1][0] [1][1] [1][2]
[2][0] [2][1] [2][2]
[3][0] [3][1] [3][2]
score [0][0] = 100;   // 배열 score의 1행 1열에 100 저장
System.out.println(score[0][0]);  // 배열 score의 1행 1열의 값을 출력

 

3 - 2
2차원 배열의 초기화

2차원 배열도 괄호 [ ] 를 사용해서 생성과 초기화를 동시에 할수 있다
다만, 1차원 배열보다 괄호 [ ] 를 한번 더 써서 행별로 구분해준다

int[][] arr = new int[][]{ {1,2,3}, {4,5,6} };
int[] [] arr = { {1,2,3,} ,{4,5,6} }; // new int[] []가 생략됨

크기가 작은 배열은 위와 같이 간단히 한줄로 써주는 것도 좋지만 가능하다면 다음과 같이 행별로 줄 바꿈을 해주는게 
이해하기 쉽다

int [][] arr = {
                  {1,2,3},
                  {4,5,6}
                };
int [][] score = {
                   {100,100,100}
                   {20,20,20}
                   {30,30,30}
                   {40,40,40}
                 };

 

4. String 클래스

1. String클래스는 char [ ] (문자배열)와 메서드 (기능)를 결합한 것
▶ String클래스 = char [ ]  (문자배열) + 메서드 (기능)

2. String 클래스는 내용을 변경할수 없다 (읽는 것만 가능)

 

3. String 클래스의 주요 메서드

char charAt(int index) 문자열에서 해당위치(index)에 있는 문자를 반환한다
int length() 문자열의 길이를 반환한다
String substring (int from ,  int to) 문자열에서 해당범위 (from ~ to)의 문자열을 반환. (to는 포함안됨)
boolean equals (Object obj) 문자열의 내용이 같은지 확인한다. 같으면 결과는 true 다르면 false
char [ ] toCharArray() 문자열을 문자배열 (char [ ])로 변환해서 반환한다

728x90

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

[Java] CH7 객체지향 개념  (0) 2023.03.20
[Java] CH6 객체지향 개념  (0) 2023.03.13
[Java] CH4 조건문과 반복문  (0) 2023.01.11
[Java] CH3 연산자 (Operator)  (0) 2023.01.05
[Java] CH2 변수(variable)  (0) 2022.12.27