백엔드/Java의 정석

TIL 정리_05

ran4 2022. 2. 21. 00:01

 

 

배열

 

배열이란? 

같은 타입여러 변수를 하나의 묶음으로 다루는 것

예)

int score1, score2, score; //일일이 선언하기 복잡하다

int[] score = new int[5]; //5개의 int 값을 저장할 수 있는 배열을 생성한다.

배열을 다루기 위한 참조변수가 필요하다 //저장공간 : 인덱스

배열의 저장공간은 연속적이다. 

 

배열의 선언과 생성

배열의 선언 : 배열을 다루기 위한 참조변수의 선언 

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

대괄호는 타입 뒤에 붙여도 되고, 변수이름 뒤에 붙여도 된다.(취향)

 

배열의 생성 :

타입[] 변수이름; //배열을 선언(참조변수 선언)

변수이름 = new 타입[길이]; //배열을 생성(실제 저장공간 생성)

 

int[] score; //int타입의 배열을 다루기 위한 참조변수 score선언

score = new int[5] //int타입의 값 5개를 저장할 수 있는 배열생성

 

배열의 길이와 인덱스 

생성된 배열의 각 저장공간을 '배열의 요소(elements)'라 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다.

인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다. 

 

인덱스(index)의 범위는 0부터 '배열길이 -1'까지 

= 인덱스의 범위는 1부터 5까지가 아닌 0부터 4까지이다.

 

배열에 값을 저장하고 읽어오는 방법은 변수과 같다.

변수이름 대신 '배열이름[인덱스]'를 사용한다

int value = score[3]; //배열 score의 4번째 요소의 값을 읽어서 value에 저장

 

*for문의 제어변수 i는 배열의 index로 사용하기에 딱 알맞아서, 배열으르 다룰 때 for문은 거의 필수적이다.

 

배열의 길이 

타입[] 배열이름 = new 타입[길이];

int[] arr = new int[5]; //길이가 5인 int 배열

 

*배열의 길이는 int범위의 양의 정수 (0포함)이어야 한다. 

그렇기에 길이가 0인 배열도 생성이 가능하다.

 

배열이름.length

자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 

배열의 길이에 대한 정보를 얻을 수 있다.

배열은 한번 생성하면 (실행동안) 그 길이를 바꿀 수 없다.”

그렇기에 '배열이름.length'는 상수이다.

 

배열의 초기화

배열의 각 요소에 처음으로 값을 저장하는 것 //자동초기화 : int

for문으로 배열을 초기화하려면, 배열의 생성과 초기화를 동시에 하는편이 좋다.

int[] score = new int[] { 50, 60, 70, 80 }; 

 

배열의 출력 

배열을 초기화 할 때 for문을 사용하듯이, 배열의 저장된 값을 확인할 때도 for문을 사용하면 된다.

int[] iArr = { 100. 95. 80 70 60}; // 배열을 가리키는 참조변수 iArr의 값을 출력한다

배열의 내용을 쉽게 확인하는 메서드

'Arrays,toString(배열이름)' //사용을 위해 import.java.util*을 추가해야한다

*이클립스 참고 : ctrl shift o >>자동으로 import문 추가

 

배열의 복사 

for문을 이용한 배열복사 

System.arraycopy()를 이용한 복사 //효율적이다 

 

배열의 활용 

1. 총합과 평균 : 배열의 모든 요소를 더해서 총합과 평균을 구한다

2. 최대값과 최소값 : 배열의 요소 중에서 제일 큰 값과 제일 작은 값을 찾는다.

3. 섞기(shuffle) : 배열의 요소의 순서를 반복해서 바꾼다.(카드섞기, 로또번호 생성)

4. 임의의 값으로 배열 채우기 : 연속 또는 불연속적인 값들로 배열을 초기화 한다.

5. 정렬하기(sort) : 오름차순, 내림차순으로 배열을 정렬한다.

6. 빈도수 구하기 : 배열에 어떤 값이 몇 개 저장되어 있는지 세어서 보여준다.

 

String배열의 선언과 생성 

String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성한다.

 

char배열과 String 클래스

String 클래스는 char[]와 메서드(기능)를 결합한 것이다

String 클래스는 내용을 변경할 수 없다 (read only)

//변경가능한 문자열을 다루려면, StringBuffer 클래스를 사용해야 한다. 

 

String 클래스의 주요 메서드

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

char배열과 String클래스의 변환

다음의 코드를 사용

 

char[] chArr = { 'A', 'B', 'C' };

String str = new String(chArr); //char -> String

char[] tmp = str.toCharArray(); //String -> char

 

커맨드 라인을 통해 입력받기

커맨드 라인에 입력한 값이 문자열 배열에 담겨서 전달된다.

자바는 길이가 0인 배열을 허용한다.

 

다차원 배열 - 2차원 배열

테이블 형태의 데이터를 저장하기 위한 배열

2차원 배열의 원리를 파악하면 다차원의 이해도 가능하다

 

2차원 배열의 선언 

괄호[]가 하나 더 들어간다.

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

2차원 배열의 인덱스

int[][] score = new int[4][3]; //4행 3열의 2차원 배열 score생성

**인덱스는 0부터 시작한다는걸 잊지말자

 

2차원 배열의 초기화

괄호 { }를 사용해서 생성과 초기화를 동시에 할 수 있다.

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}

};

2차원 배열에서는 

score[i].length와 향상된 for문의 사용이 중요하다. 

 

가변배열 

2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수를 배열하지 않고, 

추후에 각기 다른 길이의 배열을 생성함으로써 유동적인 가변 배열을 구성할 수 있다.

가변배열 역시 중괄호{}를 이용하여 생성과 초기화를 동시에 하는것이 가능하다.

 

다차원 배열의 활용 - 참고사항

문자열의 비교와 출력 equals(), toString()

1차원 배열 equals

2차원, 다차원 deepEquals

배열의 정렬 sort() //오름차순으로 배열

 

배열의 복사

copyOf(), cofyOfRange()

'백엔드 > Java의 정석' 카테고리의 다른 글

TIL 정리_07  (0) 2022.02.22
TIL 정리_06  (0) 2022.02.21
TIL 정리_04  (0) 2022.02.19
TIL 정리_03  (0) 2022.02.18
TIL 정리_02  (0) 2022.02.17