inflearn

[인프런] 김영한의 자바 입문 강의 섹션8. 배열 (240102)

hail2y 2024. 1. 2. 23:54

드디어 뭔가 프로그래밍다운 챕터에 들어선 기분이다. 아직 클래스, 객체 배우기 전이지만 그래도 얼른얼른 배우고 싶다-

1/2 섹션8 배열 필기

비슷한 변수(students1, students2, students3...)가 반복되어도 변수명이니까 반복문을 적용할 수 없겠지

그래서 같은 타입의 변수를 반복 선언할 수 있도록 배열을 사용한다. 

int[] students; // 배열 변수 선언
students = new int[5]; // 배열 생성

 

주의해야할 건 배열 변수를 선언한다고 해서 아직 사용할 수 있는 배열이 만들어진 건 아니다. 

> int[] students 배열변수에는 배열을 담을 수 있구나 정도로 이해한다. 

 

  • 인상적이었던 건 자바는 배열을 생성할 때 그 내부 값을 자동으로 초기화한다.
    숫자는 0, boolean은 false, String은null로 초기화한다.
  • new int[5] 통해 배열 생성 시, 배열 크기만큼 메모리를 확보하고 이 배열에 접근할 수 있는 참조값(주소값)을 반환한다. 그리고 이 메모리 참조값(주소값)을 배열 변수(students)에 저장한다.

cf. 참조값 출력 시 [I@4617c264가 나오는데 [I는 int형 배열을 뜻하고 @ 뒤에 16진수는 참조값.

students[0] = 90;

x001[0] = 90;

이로써 (배열)변수에 있는 참조값을 통해 실제 배열에 접근하고 인덱스를 통해 해당 위치의 요소에 접근한다. 

 

자바 변수 데이터 타입은 기본형참조형으로 분류한다.

기본형은 사용하는 값을 직접 넣어두는 타입이고, 참조형은 데이터 접근을 위한 주소(참조)를 저장한다.

ex) 배열, 클래스,  객체

배열과 같은 참조형은 크기를 동적으로 할당 가능하다. 

 

System.out.println("학생" + i+1 +" 점수: " + students[i]);

 

여기서 괄호 없이 i+1만 입력하면 학생01, 학생11, 학생21, 학생31,... 처럼 입력된다.

학생이라는 문자열과 i를 더하면 (문자열+숫자)이므로 문자열이 된다. 이후 1도 마찬가지의 이유로 문자열이 나온다. 따라서 괄호를 쳐 줘야 의도한 결과가 나온다.

 

  •  for문 안에서 students.length로 end 값을 지정해줄 수 있다.  X.length는 배열 변수 길이(사이즈, 크기)를 반환하고 이것은 조회만 가능하다. 
int[] students = new int[]{90,80,70,60,50}; // 중괄호를 이용해 배열 값을 직접 입력할 때는 배열 크기를 지워준다.
int[] students = {90, 80, 70, 60, 50}; // 배열 변수 생성과 동시에 초기화할 수 있다, 한 줄에 함께 사용할 때만 가능

// 오류 발생
int[] students;
students = {90, 80, 70, 60, 50};

 

2차원 배열

  • arr.length - 행의 길이
  • arr[row].length - 열의 길이

 

  • 향상된 for문 = for-each문(각각의 요소를 탐색한다는 의미에서) - 실무에서 제일 많이 쓴다.
  • for-each문 단축키 iter

배열을 처음부터 끝까지 순회한다. (내부에 인덱스가 숨겨져 있다.)

인덱스가 내부에 숨겨져 있으니까 증가하는 인덱스 값 사용해야 할 때는 일반적인 for문 대신 사용한다. 

for (int number = numbers) {
	// 등호 오른쪽은 배열
    // 등호 왼쪽은 찾은 값을 저장할 변수
}

 

배열 길이 모르겠고 배열 처음부터 끝까지 그저 탐색하면서 값을 가져와 처리한다 하면 향상된 for문 사용한다. 

 

~ 문제 풀면서 적어둔 것 ~

// 마지막 숫자에는 , 안 붙이는 조건 (순방향 출력 문제)
for (int i = 0; i < numbers.length; i++) {
    if(i < numbers.length -1) {
    	System.out.print(", ");
    }
}

 

minNumber = maxNumber = numbers[0]; -- 잘 사용하지는 않는다고 한다.

 

정수형 배열 int[]만 봤는데 double[], String[]도 있다!!!!!!

과목(국영수)도 배열로 선언해서 루프 돌릴 수 있다!

 

copy 해서 풀 거는 copy해서 풀어볼 수 있도록! - 치환할 거 했을 때 장점을 바로 체감할 수 있도록

 

배열에서 고려해볼 만한 문제점

  • 배열의 최대 길이(사이즈, 크기)를 정해두지 않고 동적으로 배열을 늘리기 위해서는 자료구조 ArrayList를 사용한다.
  • 상품 안에 가격, 이름 넣어 묶어서 관리하고 싶다면 클래스, 객체 이용한다.  

+ 번외 치트키

  • shift 위/아래 -- 라인 단위로 범위 지정
  • ctrl shift 위/아래 -- 선택한 코드 원하는 위치로 이동

 

강의를 들으면 들을수록 느끼는 거지만 더-- 많이 배우고 익혀서 더더 성장하고 싶다! 시간이 없다는 생각에 초조하기도 하지만 하루 빨리 찐-코딩을 경험하며 느낄 수 있는 것들을 느껴보고 싶다. 그때가 되어서 내가 개발자의 길로 나아가야 할지 탈 컴공의 길을 갈지를 결정할 수 있을 것 같다. 아직 난 찐-코딩을 경험해 봤다 생각은 안 해서 내가 아는 게 더 많아지면 분명 재밌어 할 거란 막연한 기대가 있다ㅎㅎ아아 오늘도 부단히 성장하자 아자아자!

 

--끝--