티스토리 뷰
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];
}
'Back-end > Java' 카테고리의 다른 글
(JAVA) Date(), Calendar(), GregorianCalendar() (0) | 2018.09.14 |
---|---|
(JAVA) 문자열 나누는 Split(), subString (0) | 2018.09.12 |
이클립스-외부 프로젝트를 내 프로젝트에 추가하기 & 글씨가 깨질 때!! (0) | 2018.09.10 |
(Java) 자바의 난수 생성(Math.random()) 과 여러 단축키들 (0) | 2018.09.10 |
조건문 If 와 switch (0) | 2018.09.06 |