코드스테이츠 - 3회차 백엔드 부트캠프/Section 1
2022.09.01 목 - 배열
곰돌이볼
2022. 9. 1. 09:20
📄 학습내용
배열
- 배열이란?
- 같은 타입의 변수들의 집합
- 참조타입으로 메모리에는 배열이 저장된 주소값을 가지고 있음
- 요소 & 인덱스
- 요소 : 배열의 각 값들
- 인덱스 : 배열의 위치, 0부터 (배열의 길이 - 1)
- 1차원 배열 & 2차원 배열
- 1차원 배열 : 배열의 요소가 값인 경우
- 2차원 배열 : 배열의 요소가 배열인 경우
- 배열 선언 및 초기화
- 배열 선언 : 배열 선언만 할 경우, 메모리 공간 확보 및 메모리 이름 붙임
- 배열 초기화 : 배열의 값을 할당해서 메모리 공간에 배열의 시작 주소값을 가짐
int[] arr; //배열 선언
arr = new int[5]; //배열 초기화
- 1차원 배열
- 배열 선언 및 초기화
- 배열 선언 : 타입[] 배열명;
- 초기화
- 배열명 = new 타입[배열길이];
- 배열명 = { 요소1, 요소2, 요소3 ... };
- 값(요소) 접근
- 배열명[인덱스]
- 배열 길이
- 배열명.length
- 배열 출력
- Arrays.toString(배열명)
- import java.utill.Arrays;
- 배열 선언 및 초기화
int[] array = {1, 2, 3};
System.out.println(Arrays.toString(array)); // [1, 2, 3]
- 2차원 배열
- 배열 선언 및 초기화
- 배열 선언 : 타입[][] 배열명;
- 배열 초기화
- 배열명 = new 타입[행길이][열길이];
- 배열명 = {{요소1, 요소2...}, {요소3, 요소4 ...} ... };
- 값(요소) 접근
- 배열명[행][열]
- 배열 길이
- 배열명.length : 배열의 행 개수
- 배열명[행 인덱스].length : 배열의 행의 개수, 즉 해당하는 배열의 열의 개수
- 배열 출력
- Arrays.toString(배열명)
- import java.utill.Arrays;
- 배열 선언 및 초기화
int[][] array = {{1, 2}, {3, 4}};
System.out.println(Arrays.toString(array)); // [조소값1], [주소값2]
System.out.println(Arrays.toString(array[0])); // [1, 2]
System.out.println(Arrays.toString(array[1])); // [3, 4]
- 가변배열
- 2차원 이상인 배열에서 마지막 차수를 정하지 않아서 배열의 길이가 가변적으로 변하는 배열
- 열의 개수는 행마다 다르게 선언 가능
int[][] arr = new int[3][];
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
System.out.println(Arrays.toString(arr[0])); // [0]
System.out.println(Arrays.toString(arr[1])); // [0, 0]
System.out.println(Arrays.toString(arr[2])); // [0, 0, 0]
- 배열 탐색
- for문, while 문 : 배열 탐색 및 배열의 요소 수정 가능
- 향상된 for문 : 배열 탐색만 가능, 배열의 요소 수정 불가능
계산기 과제
심화기능을 구현해보았다.
https://github.com/kung036/be-sprint-calculator
🧶 발생한 문제 및 해결방법
- 문제점) String의 length()와 배열의 length의 차이점은?
- 해결방법) String의 length() 메서드가 선언될 때 String 변수의 길이를 측정해서 반환하고, 배열이 처음 생성될 때 배열의 길이는 length 상수에 저장된다. 즉 String의 length()는 메서드이고 배열의 length는 상수이다.
- 문제점) 빈 배열은 어떻게 생성할 수 있을까?
- 해결방법)
- 배열명 = new 타입[0]
- 배열명 = new 타입[] {}
- 문제점) String을 어떻게 배열로 만들 수 있을까?
- 해결방법) String의 split() 메서드
- 사용방법 : 문자열 배열 = 문자열.split(분리할_기준문자열)
- 문제점) 배열의 길이를 어떻게 수정할 수 있을까?
- 해결방법 1) Arrays.copyOf() 사용
- 사용방법 : 배열 = Arrays.copyOf(배열, 배열길이)
- 설정한 배열의 길이만큼 배열이 생성
- 원래 길이보다 길어진 경우에는 추가된 길이만큼 배열 뒤에 0이 추가되고, 짧아진 경우에는 뒤의 부분이 사라진다.
- 해결방법 2) Arrays.copyOfRange() 사용
- 사용방법 : 배열 = Arrays.copyOfRange(배열, 시작인덱스, 종료인덱스)
- 시작인덱스부터 (종료인덱스-1)만큼의 부분 배열
- 해결방법 3) System.arraycopy() 사용
- 사용방법 : System.arraycopy(원본_배열, 복사시작_인덱스, 붙일_배열, 복사시작_인덱스, 복사한_배열길이)
- 문제점) 과제 push할 때 문제 발생
- 해결방법) 나의 github의 repository의 주소가 아닌 코드스테이츠 gitjub의 repository로 연결해서 해서 실패했다. 그래서 remote 명령어를 통해서 이 문제를 해결했다.
- 문제점) 문자열의 특정 문자를 대체하는 방법은?
- 해결방법 1) String 메소드 replace()
- 사용방법 : 문자열 = 문자열.replace(대체_전_문자열, 대체_후_문자열)
- 해결방법 2) String 메소드 replaceAll()
- 사용방법 : 문자열 = 문자열.replaceAll(대체_전_문자열, 대체_후_문자열)
- 정규식 사용 가능
⭐ 공부 난이도
배열 ☆☆☆☆★
🎡 페어리뷰
🌕 느낀점
아직까지는 저녁 복습 시간이 없어도 진도를 따라가는데 큰 어려움이 없다. 배열 사용 방법이 C언어나 파이썬이랑 달라서 아직 익숙해지는데 시간이 걸렸다. 그리고 다양한 함수를 적절하게 사용하는게 중요한 것 같다. 배열과 계산기 과제 이외에 여러 추가 과제들(하지 않아도 괜찮은 추가 과제)이 있던데 주말에 git을 하고 해봐야겠다. 원래 3일동안 페어와 같이해야 했지만 아쉽게도 하루만 같이해서 아쉬웠다.