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];

뭐 이런식..

+ Recent posts