728x90

이 강의는 자바의 프로젝트를 어떻게 만드는지, 또한 빌드를 어떻게 하는지에 대한 강의를 진행하지 않는다.

그러나 자바의 기본적인, 그리고 자바에 필수적인 기능들도 분명 존재하고 이 블로그엔 그 작업에 필요한 포스팅도 함께 제공하고 있다.

그 정보를 확인하고 싶다면 여기를 참조하라. 양이 조금 되고 현재진행형으로 늘어나고 있으므로 페이지내의 찾기(ctrl+f 나 cmd+f)로 찾아보도록하자.


배열이란 연속되서 붙어있는 자료구조를 의미한다. 같은 타입의 자료를 묶어줄때 사용하는 것이 배열인 것이다.

배열은 여러가지 특징을 지니지만 이번 시간에 배열을 자료구조적인 관점에서 설명하지 않겠다.

그냥 배열은 특정자료형을 한개가 아닌, 여러개를 묶어다니기 위해서 만든 것이다 정도로만 알면되겠다.

만약 자세한 설명이 필요하다면 이 곳을 참조하라.


이 블로그에서는 자바에서 배열을 어떻게 생성하는지, 그리고 자바에서 배열에 대한특징을 다루도록 하겠다.


배열의 선언


public class Main {
public static void main(String[] args) {
int[] arr1;
arr1 = new int[5];
int[] arr2 = new int[5];
}
}


배열의 선언은 일반 변수의 선언과 조금 다르다.

바로 생소하지만 new라는 연산자를 사용한다. 


int []arr = new int[n];


new라는 연산자에 대해 설명을 하자면 뭔가 새로운것을 제조하는 작업이라고 생각하면된다.

자세히 말하자면 인스턴스를 만드는 작업인데 배열의 경우 인스턴스를 반드시 만들어줘야한다.

인스턴스에 대한 설명은 다음장인 객체에서 설명하겠다.

어쨋던 뭔가 기존에 언어적으로 제공하는 타입(자바 2장에서 기본타입이라고 언급하였다. 보라색 글자로 뜨는 타입이다.)을 제외하고

새로운타입을 만들경우, 반드시 new연산자를 사용해서 만들어줘야한다. 그 설명 역시 지금 하기에는 애매하므로 다음장에서 설명하겠다.


배열은 []안에 넣어준 크기만큼 사용할 수 있다. 그러나 일반적인 인식과는 다르게 만약 크기가 n이라면

인덱스 번호는 0부터 n-1까지 사용할 수 있다. 0부터 n-1까지도 n개인 것은 맞지만,

처음 배열을 하는 사람에게는 햇갈릴 수 있다.


배열에 인덱스 접근


public class Main {
public static void main(String[] args) {
int[] arr;
arr = new int[5];
arr[0] = 10;
arr[1] = 7;
arr[2] = 2;
arr[3] = 4;
arr[4] = 9;
for (int i = 0; i < 5; i++) {
System.out.println(arr[i]);
}
}
}


배열의 인덱스를 접근할 때는 해당 배열의 []안에 숫자를 넣어주는 것으로 사용할 수 있다.

위에서 언급했지만 배열의 인덱스는 0번부터 n-1까지 있다.

그러므로 접근할때 만약 인덱스를 넘어서거나 음수가 들어간다면 에러가 뜨게된다.

물론 실수나 문자, 문자열역시 들어가는것이 불가능하다.


배열의 초기화


public class Test {
public static void main(String[] args) {
int[] i = {1, 2, 3, 4, 5};
float[] f = new float[]{1.1f, 2.2f, 3.3f, 4.4f, 5.5f};

}
}


배열의 초기화는 두가지 방식이 있다.

1 - int[] i = { 1, 2, 3, 4, 5 };

2 - float[] f = new float[] { 1.1f, 2.2f, 3.3f, 4.4f, 5.5f };

만약 이 방식으로 초기화하지 않는다면 하나하니씩 일일이 초기화하는 방법밖에 없다.

참고로 2번의 경우에 new float[]의 괄호안오 숫자를 넣지 않는다.


배열의 복사


public class Main {
public static void main(String[] args) {
int[] arr1 = new int[5];
int[] arr2 = new int[5];
for (int i = 0; i < 5; i++) {
arr1[i] = i * i;
}
System.arraycopy(arr1, 0, arr2, 0, 5);
for (int i = 0; i < 5; i++) {
System.out.println(arr2[i]);
}
}
}


System.arraycopy(src, srcPos, dest, destPos, length);

배열은 일반적인 =을 사용할 수 없다. 이는 복사가 일어나지 않는다.

아직 배운범위에서 이를 설명할 순 없으므로 안된다는 말만 하고 넘어가겠다.

따라서 배열을 복사하기이ㅜ해서는 System.arraycopy라는 함수를 사용해야한다.

사용방법은 예제와 같은데 srcPos에서는 복사될 애의 시작위치를, destPos는 복사할 애의 시작위치를 적고 마지막으로 length를 적는다.

또 다른 방법으로는 클로닝을 하는 방법이 있다.


public class Main {
public static void main(String[] args) {
int[] arr1 = new int[5];
int[] arr2;
for (int i = 0; i < 5; i++) {
arr1[i] = i * i;
}
arr2 = arr1.clone();
for (int i = 0; i < 5; i++) {
System.out.println(arr2[i]);
}
}
}


arr2 = arr1.clone();


두방식은 같은결과를 내지만 결론적으로 말하면 쓰는 방법에 차이는 있다. 둘을 설명하자면 아래와 같다.



위의 방식의 경우에는 이미 있는 배열에 값을 덮어쓰는 것이다.

따라서 arraycopy의 대상이 되는 녀석은 반드시 new를 사용해서 실체가 존재해야한다는 것이다.



그러나 클로닝은 그럴필요가 없다. 왜냐하면 clone()함수를 호출하면 자동적으로 실체를 만들어주기 때문이다.


이 부분이 이해가 안되는건 아직 객체를 설명하지 않았기 때문이다. 다음시간에 객체를 배우게 된다면,

이 부분에서 이해할 수 있다.

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

[Java-10]생성자와 this  (0) 2017.10.01
[Java-09]객체와 클래스  (0) 2017.09.30
[Java-07]반복문  (0) 2017.09.29
[Java-06]switch(스위치)  (0) 2017.09.29
[Java-05]조건문  (0) 2017.09.29

+ Recent posts