오늘 배울 것은 배열 객체이다.
c언어 때부터 많이 사용해 온 배열이나
java의 특징때문에 꼭 참조변수를 이용해야 한다.
배열 객체 Array
그럼 java에서 배열을 만드는 방식부터 알아보자.
정확하게 말하면 c언어와는 약간 다르다.
Java는 참조변수를 사용하기 때문에
c언어에서 Heap 메모리를 사용해 포인터 변수를 사용한 문법을 써줘야 한다.
또한 int aaa[] 처럼 사용도 가능하지만
java에선 int[] aaa처럼 많이 사용한다고 한다.
우선 기본적으로 나머지는 c언어에서 사용방법이 같다.
배열을 사용할 때, 하나씩 출력하거나 하나씩 입력해야 한다.
대신
배열 객체에 배열 요소의 개수를 확인할 수 있는
멤버변수가 있다.
어제 String객체에서 한 length처럼 말이다.
배열이름 aaa를 적고
.(마침표)를 하고 length;를 써주면 int 값으로 리턴해준다.
그럼 c언어처럼 배열 객체를 생성하면서 배열요소값들을 초기화할 수 있을까?
그렇다.!!
우리가 아까 배운 문법에다가
c언어에서 값을 넣듯 { }를 이용해 값을 초기화해 주면 된다.
그러나 위에 사진을 보면 에러가 난다.
그 이유는 3이라는 숫자를 입력했기 때문이다.
어차피 값을 넣었으니 안 적어도 된다는 뜻..?!
즉 이렇게 적어줘야 한다.!!
(초기화할 때 배열 개수를 명시하면 안 된다!)
그러나 String도 그렇고
축약표현이 있었다. (그만큼 많이 사용하니까..)
배열도 그렇다.
뒤에 new int[]를 안써줘도 된다.
마치 c언어같이 초기화할 수 있다.
(자동으로 new int[]를 해주는 것이다.)
그래서 이렇게 사용할 수 있고
이게 많이 사용하는 방법이다.
또 우리가 c에서 배웠던 것처럼
변수를 사용해 배열의 개수를 컨트롤할 수 있다.
↓ class import 안 외워도 되는 방법

java엔 class가 엄청 많다.
이를 하나하나 다 외우긴 어렵다.
그럴 때 내가 쓰려는 객체 이름을 쓰고 빨간색 밑줄이 뜨면
거기로 마우스를 가져간다.
그러면 import라고 뜨는데
이를 누르면 자동으로 맨 위에 import 문이 작성이 된다!!!
그럼 우리가 변수 n을 입력받아 배열의 개수를
원하는 만큼 생성할 수 있다.
이전에 배운 Scanner를 통해 입력을 받고 그 값을 n에 대입해 주면 된다.
이렇게 배열에 넣을 값을
변수를 사용해서 넣을 수도 있다!
그리고 배열요소의 개수가 0인 배열도 만들 수 있다.
ggg와 hhh는
배열의 주소를 가진 참조변수이다.
따라서 하나의 주소를 두 참조변수가 가지고 있는 것이다.
따라서 hhh index 1번의 값을 변경하면 ggg[1]의 값 역시 바뀐 값으로 나오게 된다.(값을 공유)
그럼 영향이 없게 하고 싶다면 어떻게 해야 할까? (값을 카피)
바로 우리가 배운 반복문을 통해
값을 새로운 배열에 넣어주는 것이다.
그럼 String도 배열로 쓸 수 있지 않을까?
그렇다.
위에서 배운 문법을 이용해 주면 된다.
String[] sss= new String[3];
이렇게 말이다.
그럼 저렇게 하나하나 넣는 방법 말고
한 번에 초기화할 수는 없을까?
있다.
기존 문법과 같지만
원래 문법대로라면 위의 사진처럼 하나의 문자열마다
각각 new String을 사용해줘야 한다.
하지만 알다시피 우린 축약형을 알고 있다.
여기서 더 나아가서 아예 값을 초기화할 땐
이런 식으로 작성할 수 있다.
당연히 우리가 만든 class를 배열로 사용가능하다.

그리고 나중에도 할 테지만 java에선 프로토타입을 할 필요가 없다.!
여기서 이제 발생하는 문제가
배열을 다루기 위해선 반복문을 써야 하는데
이게 코드가 길어지는 등의 상황이 발생하면
에러가 날 확률이 높아진다.
그래서 개량한 for 문이 있다.
기존의 for 문은 이런 형식으로 되어있어서 하나 잘못 입력해도
빨간 줄이 안뜰 가능성이 있다.
그러나 확장된 for문에서는
이런 여지를 없애는 방법이다.
for(int t : 참조 배열 이름) 만 쓰면 되니 엄청 편하다.
다른 자료형도 이렇게 사용이 가능하다.
2차원 배열 - 1차원 배열 참조변수를 여러 개 가진 배열 객체
java의 2차원배열은 사실 1차원배열 참조변수를 여러개 가진 배열객체이다.
c언어랑은 다르게 순서는 바뀌지만 기존 우리가 아는 방법은 맞다.
다만 c로 생각하자면 주소값을 찾아 들어가면 한번 더 주소값이 있는 형태가 되는 것이다.
확장된 for 문법을 사용해서도 사용이 가능하다.
그리고 2차원 배열의 초기화도 간단한 방법으로 가능하다.
그리고 축약표현문법은 우리가 아는
c언어의 다차원배열과 닮아있다.
3차원배열은 2차원배열 참조변수를 여러개 가진 배열객체일 뿐이다.
그림을 그려보면 쉽다. 2차원배열 처음 사진을 보면 조금 더 이해가 쉽다.
'# 개발 > Java' 카테고리의 다른 글
Java #5 - class 위치, 패키지, 접근제한자 (국비17일차) (0) | 2023.01.25 |
---|---|
Java 연습문제 #4 (국비15일차) (0) | 2023.01.20 |
Java #3 - String 객체 (국비15일차) (1) | 2023.01.19 |
Java 연습문제 #3 - 숫자 야구 게임 만들기 (국비14일차) (0) | 2023.01.18 |
Java 연습문제 #2 - console 입력 (국비14일차) (0) | 2023.01.18 |