04 배열
● 자료형에 따른 기본값
Boolean |
false |
char |
‘\u0000’ |
byte, short, int |
0 |
long |
0L |
float |
0.0f |
double |
0.0d 또는 0.0 |
참조형 변수 |
null |
● 배열이란
○ 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
○ 변수 명 = 배열 참조변수!(배열의 주소를 저장하고 있다는 거지)
int[ ] array -> 변수 array는 array[0]을 가리키는 주소가 저장되어 있다!
int array[ ]; 로 선언도 되지
○ 배열의 생성
■ new로 생성!
타입[ ] 변수명; 변수명 = new 타입[길이]; |
타입[ ] 변수명 = new 타입 [길이]; |
■ 선언만 하면 배열을 가리킬 주소 저장할 변수명만 할당되고, 배열은 없는 상황인데, new로 배열을 생성됨
■ 생성되면 각 요소는 0으로 초기화 되고, 대입연산자로 인해 변수명에 배열의 주소가 저장됨
○ 배열 길이
■ 길이가 0인 배열도 생성 가능 (0 이상의 정수)
■ 배열이름.length
□ 배열 길이를 리턴
□ 배열 길이를 참고할 수 있는 것이지, 이 메서드로 배열 길이를 변경할 수 없음
■ 배열 길이 변경하는 스텝!
① 더 큰 배열을 새로 생성함
② 기존 배열의 내용을 새로운 배열에 복사
○ 배열의 초기화
■ 배열 생성과 초기화 동시에 할 때는 { }<-로 묶어서 가능
■ 이 후 초기화 하려면 요소 하나하나 다 초기화 해줘야 함
○ 배열의 출력
■ Arrays.toStirng(배열이름) : {요소1, 요소2, … } 형식의 문자열 반환
■ 배열이름.toString : 배열타입@주소 형식으로 출력됨
■ 아니면 for문으로 요소에 하나하나 접근해서 뽑지
○ 배열의 복사
(1) for문 이용해 새 배열에 하나하나 요소를 복사
한 뒤 구 배열 참조변수에 신 배열 참조변수를 대입(주소!)하면 구 배열 참조변수는 가비지 컬렉터가 수거함
구 배열과 신 배열은 같은 배열을 가리키는 것! 같은 배열이란 말씀
(2) System.arraycopy( )를 이용해 배열 복사
System클래스의 arraycopy( )가 for문보다 효율적
System.arraycopy(구배열, 시작요소 인덱스, 신배열, 복사할 길이)
for(int i = 0 ; num.length ; i++) { newNum[i] = num[i]}
= System.arraycopy(num, 0, newNum, num.length )
● String배열
○ 문자열을 담을 수 있는 배열
○ 선언 후 생성하면 각 요소는 null로 초기화 됨
○ String 배열의 초기화
■ Stirng도 클래스라서 원래 new로 생성해야 되지만 String만 특별히 그냥 초기화 가능
String [ ] name = new Sting[3];
name[0] = new String(“KIM”); -> name[0] = “KIM”;
이게 된단 말(둘 다 맞음)
■ 본디 String이 문자열을 저장한 주소를 가리키는 변수이므로..
배열 참조 변수는 배열이 저장된 주소를 저장하고 있고
각 배열의 원소는 String변수이므로 문자열이 저장된 주소를 저장하고 있음
■ 참조형 배열 ! : 배열에 객체의 주소가 저장됨!
(기본형 배열이 아닌 거 기본형은 배열에 리터럴 그대로 들어감)
○ char 배열과 String 클래스
■ String 클래스는 char[](문자배열)에 메서드를 더한 클래스임
■ String 객체는 읽을 수만 있을 뿐 내용을 변경할 수 없음
String a = “Oh Yeah”;
a += “!!”; -> a가 변형된 게 아니고 새로운 내용의 문자열이 생성된 것임
■ String 클래스의 주요 메서드(앞은 반환형임!)
□ char chatAt(int index) : 문자열에서 해당 위치에 있는 문자 반환
□ int length(); : 문자열의 길이를 반환
□ String substring(int from, int to) : 문자열에서 해당 범위의 문자열을 반환(from은 범위 안 to는 범위 밖)
□ Boolean equals(String str) : 문자열의 내용이 같은지 확인 (== 안씀)
□ char[] toCharArray() : 문자열을 문자 배열로 변환해서 반환
■ char[ ] <-변환 -> String
□ char[ ] chArr = {’A’, ’B’, ’C’};
String str = new String(chArr); // char[ ] -> String
char[ ] tmp = str.toCharArray(); // String -> char[ ]
□ String 클래스 charAt(int index) : String 문자열의 인덱스에 위치한 문자를 한 문자씩 읽음
○ 커맨드, 라인을 통해 입력 받기
■ 프로그램 실행할 때 클래스 이름 뒤에 공백문자로 구분하여 여러 개의 문자열을 프로그램에 전달할 수 있음
■ 커맨드라인을 통해 입력된 문자열은 String 배열에 담겨서 main메서드 매개변수(args)에 전달됨
main메서드 안에서 args[0], args[1], … 이렇게 접근 가능
■ 커맨드라인에 매개변수 입력하지 않으면 크기가 0인 배열이 생성되어 args.length = 0이 됨
● 다차원 배열
○ 다차원 배열은 배열의 배열로 구성됨
여러 개의 1차원 배열을 묶어서 또 다른 배열로 만듦
배열의 이름과 각 행의 첫 열은 그 배열의 참조변수이므로 다차원 배열의 참조변수는 각 행의 주소를 저장한 배열의 주소를 저장한다고 보면 됨
○ 가변 배열
■ 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변배열 구성 가능
int [ ][ ][ ] arr = new int[5][6][ ];
arr[0][0] = new int[2];
arr[0][1] = new int[5];
뭐 이런식..
'JAVA > 이론' 카테고리의 다른 글
[java][이론] 006 변수와 메서드 (0) | 2020.07.02 |
---|---|
[java][이론] 005 클래스와 객체 (0) | 2020.07.02 |
[java][이론] 003 조건부 흐름 제어 및 반복문 (0) | 2020.06.25 |
[java][이론] 002 연산자 (0) | 2020.06.25 |
[java][이론] 001 변수 (0) | 2020.06.25 |