티스토리 뷰





반응형

1. 배열의 선언


자바의 배열 선언은 크게 2가지의 과정을 거친다. 


첫째 배열 선언 - 주소값을 가지지 않은 변수생성(Stack영역)

자료형[] 변수이름; or

자료형 변수이름[];

ex) int[] arr; or int arr[];


두번째 배열의 할당 - 배열객체 생성후 변수에 주소값 할당(Heap영역) 초기화단계

변수이름 = new 자료형[저장데이터개수];

ex) arr = new int[5];


배열선언으로 사용할 자료형과 변수이름을 설정하고 이 배열을 쓸 저장공간을 일일히 따로

프로그래머가 직접 할당해줘야 사용할 이름과 힙영역에 공간을 만들어 달라고 하는것이다.


배열의 할당을 하면 공간을 만들면서 자동으로 초기화가 되는데 처음에 초기화를 하면서 배열할당이 가능하다.

ex) int []arr={1,2,3,4,5};

    String arr[]={"홍길동","이순신","세종대왕"};

이렇게 하면 arr = new int[5];를 할 필요가 없고 해선 안된다.(하면 null 혹은 0으로 재설정된다.)


하나씩 일일히 주고 싶다면 

arr[0]=1;

arr[1]=2; 와 같은 방법도 있다. 기호에 맞게 사용하면 될것 같다.


배열을 하면 for문을 빼 놓을 수가 없는데 이를 이용한 방식의 예로는

 for(int i=0;i<arr.length;i++){

arr[i] = i + 1;

}

이러한 식이 있는데 arr.length는 이 배열이 갖고 있는 갯수만큼 돌리겠다는 의미이다.

arr[4]라면 4까지 for문을 이용하겠다는것과 같다.


1-2. 얕은 복사와 깊은 복사


얕은 복사 : 객체의 주소값만 가져와 참조형변수에 저장하고 하나의 객체를 두 변수가 참조하고 있는 것

방법 : int[] arr1 = new int[4]

   int[] arr2 = arr1;

서로 같은 객체를 바라 보기때문에 두개의 배열중에 한곳에서만 수정을 하여도 다른 배열의 값까지 영향이 가는 것


char[] arr1 = {'a','b','c'};

char[] arr2 = arr1;   -> 들어 가는 값과 주소값이 모두 동일하게 들어간다.


arr2[0] = 'f';           ->두개중 하나의 값만 수정했지만 둘다 똑같이 수정되어있다.



깊은 복사 : 다른 객체를 생성하여 새로운 객체에 데이터 내용을 복사하는 것

방법 : for문을 이용한 1:1 복사, System.arratcopy()메소드를 이용, clone()메소드를 이용


char[] arr1 = {1,2,3,4,5};

char[] arr2 = new int[5];


for(int i=0; i<arr1.length; i++){

arr2[i] = arr1[i];

}                                ->같은 값을 가지지만 주소값은 arr1, arr2 서로 다르다.


System.arraycopy(복사할 배열, 복사시작점, 복사될 배열, 복사될 시작점, 어디까지 복사할 것인지);

System.arraycopy(arr1, 0, arr2, 0, arr1.length);


arr2 = arr1.clone();




2. for in문


기존의 for문

모든 언어에서 쓰이는 반복문중 하나인 for문은 for( 조건식 )으로 이루어져 있다.

조건식에는 (시작지점; 반복할 횟수; 증감식) ex) (int i=0; i<10; i++) { 반복할 행위 };로 구성이 된다.


for문과 문자을 사용할 때 일반적인 for문이 아니라 좀더 거기에 특화된 반복문이 있는데 바로 for-in문이다.


 String[] str2= {"딸기","바나나","복숭아","키위","사과"};


                 for(String value : str2) {

if(value.equals("복숭아")) {

System.out.println(value);

}

}

 String value를 만들어서  : str2를 하게 되면 str2만큼 반복문이 돌아가고 str2의 값이 value안에 들어 간다는 의미이다.

그래서 이 for문 안에 if문을 만들어서 value의 값이 복숭아가 되었을 때 print문으로 그것을 출력해줄 수 있다.

자바나 씨언어같이 일반적인 언어를 많이 접한 사람에겐 생소할 수 있다. 나도 처음엔 많이 생소했는데 자바스크립트나

서버단에 갈 경우에 쓰임이 많기 때문에 알아두는것이 좋을 것 같다.



2차원 배열에서의 for-in문


for(int[] i : arr){

 for(int j : i){

System.out.println(j);

}

}




관련 예제인데 확장부분의 문제가 괜찮아서 첨부했다.



hint)

for(int i=0;i<str2.length;i++) {

int cho = (int)(Math.random()*5);

str2[cho]=str2[i];

}



반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31