안녕하세요~ 넴넴입니다!
문제 2개는 잘 풀어보셨나요? 저도 공부하고 있는 입장이라
그렇게 쉬운 문제도 아니라서 2번째 문제에서 고민 좀 했던 기억이 납니다 ㅋㅋ
오늘은 공부 4일차)에서 참조 타입하다가 남은걸 더 하려고 합니다.
문제쪽에서는 제가 바빠서 2문제를 덜 냈었는데 공부양이 너무 짧으면 2문제를 넣으려고 합니다!
같이 열심히 해봐요~ (같이 하시는 분이 있으시면.. ㅎㅎ)
타입 항목별 기본값
일반 변수 생성 시 기본값 X, 초기화는 필수
코드로 넘어 가봅시다
위에 표를 보시면 값이 들어가지 않을 때 int는 0이고,
String같은 참조 타입은 null이라고 되어 있기 때문에 저 값이 나오게 됩니다.
배열의 길이
- 배열에 저장할 수 있는 전체 항목 수
- .length사용
코드로 이해하러 가봅시다.
똑같은 class 파일을 사용하면 numbers를 사용할 수 있습니다.
설명을 하자면 표 아래 사진에서 numArr이 new int[5]라고 되어있기 때문에
numbers.length답은 5가 뜨고
아래 for문은 numbers에 숫자 10개가 기입되어 있기 때문에
이렇게 답이 나옵니다.
새로운 클래스 파일을 만들어 주고 배열 약간 복습을 해봅시다.
위에 2개는 가능하지만 마지막 것은 안됩니다.
왜냐하면 배열만 먼저 선언하고 나중에 해당 배열에 데이터를 일괄 적용은 할 수 없다고 합니다.
그럼 가능하게 해주려면?
배열만 먼저 선언하고 나중에 new 키워드를 사용해 배열의 크기를 지정하는 방식은 상관이 없습니다!
복습을 간단하게 끝내고
다른 배열 타입으로 공부하러 가봅시다
다차원 배열
- 2차원 배열 이상의 배열 (수학의 행렬과 같은 자료 구조)
- 자바는 1차원 배열을 이용해 2차원 배열 구현
1차원 배열 : 배열의 요소를 데이터(값)으로 가지는 배열
2차원 배열 : 배열의 요소가 1차원 배열인 배열
3차원 배열 : 배열의 요소가 2차원 배열인 배열
이것이 1차원 배열과 2차원 배열의 차이입니다
저희가 for문에서 했을때 1부터 시작이 아닌 0부터 시작한다고 했습니다.
이렇게 배열 순서로 이해하시면 됩니다.
출력하는 방법도 알아봅시다 22, 14를 먼저 출력 해볼까요?
이렇게 출력하는 방법이 있습니다.
이제 length를 사용해봅시다.
이렇게 하면 값이 어떻게 나올까요?
arr2의 크기는 총 5이고, 각 배열당 5개의 값이 들어있으므로
값이 모두 5가 나오게 됩니다.
이번에는 값이 어떻게 나올까요?
제가 생각했을 때는 처음 크기는 4가 나오고, 아래 크기는 5,2,4,3 이 나올거 같습니다.
확인해보죠!
정확하게 맞췄습니다.
이번에는 좀 더 어렵게 반복문을 이용해서 2차원 배열의 내용을 모두 출력 해봅시다.
이렇게 i, j를 2개 만들어주고 i로 for문 1개, j로 for문 하나씩 만들어 주고
똑같이 코드를 추가해주신 뒤 출력해봅시다!
각 배열 위치마다 값을 보여줍니다. 이렇게도 출력을 할 수 있습니다.
이제 3차원 배열을 만들어 봅시다.
이게 3차원 배열입니다.
이것도 출력을 해볼까요? 원하는 값을 출력해봅시다
저는 10, 18, 4 를 출력해보겠습니다.
이제 어떻게 만들고 출력을 하는지 아실거라 믿습니다.
객체를 참조하는 배열
- 기본타입(byte, char, short, int, long, float, double, boolean) 배열
- 참조 타입(클래스, 인터페이스) 배열 - 각 항목에 객체의 주소를 가짐
저번에 equals한 거 기억하시나요? 잘 생각해서
값이 어떻게 나올지 생각해봅시다.
참고로 String 참조는 true, false 값이 나오게 됩니다.(아무것도 없을때는 null이니)
우선 첫번째 값은 true가 뜰 겁니다. 저장된 주소가 같기 때문입니다.
하지만 0과 2는 false가 뜰 거에요. 왜냐하면 new 연산자를 사용해서 저장된 주소가 다르기 때문입니다.
마지막 값은 저장된 주소가 가지고 있는 데이터를 비교해 문자열이 같기 때문입니다.
배열 복사
- 배열은 한 번 생성하면 크기 변경 불가
- 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사
복사 방법
- for문 이용
- System.arrayCopy() 메소드 이용
- Array 클래스 이용
이건 이해하리라 믿습니다.
이것도 충분히 이해가 되실거에요
이상한거 눈치채셨나요?
분명 arr1을 바꿨는데 arr2도 바뀌어져 있는 것을 볼 수 있습니다.
원래 arr2는 arr1과 다른 값을 사용하고 있었는데
위에서 arr2 = arr1이라고 해서 같은 값을 사용하게 변경이 되었습니다.
그래서 지금 arr1을 바꿨는데도 arr2가 똑같이 바뀐걸 확인할 수 있는것이죠
이번에는 arrayCopy()를 써봅시다
만들어 주시고
아래에서 이렇게 출력을 해줘봅시다.
원래 arr4의 값은 000이어야 하지만
System.arraycopy(arr3, 0, arr4, 0, arr3.length); 라는 메소드를 사용해서 arr4에 넣어줬습니다.
마지막으로 Arrays 클래스를 사용한 배열 복사만 하고 끝냅시다
조금만 더 힘내서! 이렇게 만들어 주시고
코드를 추가해주고 출력 값을 볼까요?
마지막으로 여기서 Arrays.copyOf() 메소드를 썼는데
Arrays.copyOf(원본배열, 복사할 크기) 형식으로 써줘야하고
매개변수로 사용한 배열을 지정한 크기만큼 복사하여 반환해 주는 역할을 합니다.
정말 고생많으셨습니다!
양이 워낙 많기도 하고 저도 코드를 많이 써서 너무 헷갈리는데
이게 코드의 매력이라고 저는 생각해서 ㅎㅎ 짜증나지만 재밌다고 생각해요
주말에는 제가 공부를 거의 안하고 쉬는 날이라고 생각해서 올릴지는 정확히 모르겠네요
즐거운 주말 보내세요~
'JAVA Basic' 카테고리의 다른 글
공부 7일차) 객체 지향 프로그래밍 (0) | 2022.12.26 |
---|---|
공부 6일차) 열거 타입 (0) | 2022.12.24 |
공부 4일차) 문제 정답 (0) | 2022.12.15 |
공부 4일차) 참조 타입 (0) | 2022.12.14 |
공부 3일차) 조건문과 반복문 (0) | 2022.12.13 |