클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

반복문과 배열 그리고 예외 처리 10 - 배열의 기초 개념 본문

프로그래밍 언어/자바

반복문과 배열 그리고 예외 처리 10 - 배열의 기초 개념

huenuri 2024. 8. 12. 12:28

오늘 정처기와 데이터베이스 공부를 하느라 자바는 새벽에 1시간 한 게 정부였다. 조금 졸리지만 배열을 조금이라도 학습하고 취침하려고 한다. 오늘 공부한 것 중에서 가장 뿌듯한 건 SCOTT 계정을 만드는 법을 알고 접속했다는 것이다.
이걸 하려고 4주 가까이 선생님께 여쭈어보고 고민했었다. 한 달 전에는 아무리 해도 되지 않아서 포기했었는데 오늘 이렇게 다시 시도하고 포기하지 않고 마침내 해낼 수 있어서 얼마나 기쁜지 모른다.

모든 공부가 그러할 것이다. 선생님 말씀이 맞았다. 구글링을 하며 이것저것 찾아보고 연구하는 것 자체가 공부였다. 뭐든지 바로 알게 되면 좋지만 그러는 경우는 거의 없다. 수많은 시행착오를 겪으며 실패와 실수 속에서 우리는 성장하고 배우게 된다.

이제 오늘 하루를 마무리하는 공부를 시작해보자! 배열도 알고보면 쉽고 재미있을 것이다.

 

학습 목표

  1. 배열의 기초 개념을 이해하고 배열이 왜 필요한지 알게 된다.
  2. 배열을 선언하고 초기화하며 사용하는 방법을 배운다.
  3. 배열과 친해지며 문제를 통해 실전 경험을 쌓는다.

학습 시간

밤 12시 10분 ~ 2시 15분 <2시간 5분 소요>


 

 

 

배열을 공부해야 하는 이유

데이터 여러 개를 효율적으로 관리하기 위한 도구이다. 자료 구조는 여러가지 종류가 있다. 정처기 공부할 때 이 부분을 충분히 학습해서 이젠 이해가 잘 된다.
배열은 같은 자료형을 순차적으로 나열해 놓은 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

배열 기초 학습

 

1. 배열의 개념

 

 

자료형은 한 곳에 저장되어 있지 않기에 아무리 비슷한 숫자로 나열을 해도 순차적인 접근이 불가능하다. 따라서 for문을 사용해서 접근할 수 없다. 하지만 같은 공간에 저장이 되어 있다면 배열을 사용할 수 있다.

 

 

 

names는 레퍼런스형 변수이기 때문에 값을 출력하면 주소값이 출력된다.

 

 

 

 

 

기본 데이터 타입 자료형은 정적 메모리 공간에 저장되는데 그 크기가 정해져있다. int는 4바이트로. 하지만 String은 레퍼런스형 타입이기에 동적 메모리 공간에 저장된다. 크기가 정해져 있지 않고 늘어났다 줄어들었다 할 수 있다.
예시에서 보면 names 변수는 정적 메모리 공간에 만들어지고, 동적 메모리 공간에 5칸짜리 배열이 만들어지는 것이다. 동적 메모리에는 주소값이 들어있고 정적 메모리에는 동적 메모리가 가리키는 이 주소값이 저장된다.


주소값을 저장하는 변수를 레퍼런스형 변수라고 한다.

String도 레퍼런스형 타입으로 원래는 new를 사용해서 만들어야 하지만, 사람들이 많이 사용하니 이를 줄여서 쓸 수 있게 제공한 것이다.
그리고 각각에 방에 저장할 값을 배열로 담아준다.

 

 

 

 

 

코드를 칠 때는 문제가 없었지만 실행을 시키면 에러가 난다.

 

 

하지만 인덱스 값을 0에 넣어주면 에러가 나지 않는다. 5번 인덱스는 없기 때문이다.

 


 

 

2. 배열 기초 문제 풀기

 


 

 

 

배열의 원소를 하나 더 추가할 때


 

 

배열의 크기 지정

 

length를 사용하면 크기를 따로 지정해주지 않아도 된다.

 


 

 

 

3. 배열의 선언 및 출력 문제 풀기

 

1번 문제

 

이렇게 하니까 배열을 하나하나 써주는 게 너무 귀찮았다. 선생님은 if문을 활용하셨다.

 

 

이렇게 푸는 거였다. 그래도 거의 혼자서 풀어본 문제이다.


 

 

 

 

2번 문제

 

2번 문제는 많이 어렵다고 생각했는데 개수를 담아줄 변수를 하나 만들면 그 다음부터는 술술 풀 수 있다.


 

 

 

 

3번 문제

 

이 문제는 어떻게 풀어야 할지 도저히 감이 잡히지 않았다. 설명을 들으니 조금 이해가 가는데 그래도 혼자서 문제를 풀어보기로 했다. max라는 큰 값을 저장할 변수가 필요하고, 어떤 것이 큰지 배열로 비교하는 것이다.

 

 

 

 

 

혼자서 풀었는데 답이 잘 나와서 정말 놀랐다. 이렇게 스스로 문제를 풀면서 실력이 더 쌓이는 것 같다.

 

 

 

선생님은 0번 인덱스 값으로 초기화시켰는데 그래도 배열로 푸는 문제이니 이렇게 하는 게 더 나은 방법일 것이다.


 

 

 

학습을 마치고

오늘의 공부는 여기까지 진행해보려고 한다. 문제들을 풀어보니 배열도 할만 했고 생각했던만큼 별로 어렵지 않았다. 동적 메모리와 정적 메모리 공간에 대해서도 전에 몇번 들어보았으나 그때는 이해하지 못했었다. 오늘 이 부분을 학습하며 이런 거구나 하는 깨달음이 왔다.
왜 new라는 키워드를 쓰는지도 알 것 같다. 문제를 더 풀며 학습하고 싶지만 이제 내일을 위해 쉬어야겠다.

오늘 정말 열심히 공부한 내게 쓰다듬어주고 싶은 마음이다~