[오늘 공부한 부분]

1. Java 참조 타입과 참조 변수 

2. Java 배열


1. 배열이란?

  • 같은 데이터의 타입을 연속된 공간에 나열하고 각 데이터에 인덱스를 부여해놓은 자료구조
  • 인덱스(Index)는 배열 항목에 붙인 번호로 0부터 시작하여 (배열길이 -1)까지 범위를 갖는다.
  • 배열은 같은 타입의 데이터만 저장할 수 있다. (int 배열은 int 값만 저장 가능하고, String 배열은 String 값만 저장)
  • 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다. 
  • 만약 배열의 길이를 수정하고 싶다면 새로운 배열을 생성하고 기존 배열 항목을 새 배열로 복사해야 한다.

 

2. 배열 선언

① 형식 1 : 타입[] 변수;

                 ex) int[ ] intArray;

② 형식 2 : 타입 변수[];

                 ex) int intArray[ ];

 

  • 변수 선언과 비슷한데 대괄호 [ ] 가 추가된 타입이다. 
  • 위에서 intArray가 배열 변수이다.
  • 배열도 객체이므로 힙 영역에 생성되고 변수는 힙 영역의 배역 객체를 참조한다.
  • 만약 참조할 배열 객체가 없다면 배열 변수는 null값으로 초기화 된다.

 

3. 배열 생성

① 값 목록으로 배열 생성 :타입[] 변수 = {값0, 값1, 값2, 값3, ....};

  • 주의할 점 : 배열 객체를 생성할 때 배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않는다.
  • 배열 변수를 미리 선언한 후 값 목록들이 결정되는 상황이라면, new연산자를 사용한다. 변수 = new 타입[ ] {값1, 값2, 값3...};

 

ex1)

String [ ] names = {"제니", "리사", "로제"};

names[0] = "제니";

 

ex2)

String[ ] names = null;

names = new String[ ]{"제니", "리사", "로제"};

 

② new 연산자로 배열 생성 : 타입[] 변수 = new 타입[길이];

  • 값의 목록을 가지고 있지 않지만 향후 값들을 저장할 배열을 미리 만들고 싶을때 사용한다.

ex)

int [ ] scores = new int[3];

scores[0] = 80;

scores[1] = 90;

scores[2] = 100;

 

 

4. 배열 길이

  • 배열에 저장할 수 있는 전체 항목의 개수
  • 배열변수.length(); 를 통해 길이를 알 수 있다.
  • 배열의 length 필드는 for문을 사용해서 배열 전체를 루핑할 때 유용하다.

 

5. 명령 라인 입력

 

https://kephilab.tistory.com/40

  • main()메소드의 매개값인 String[ ] args 가 왜 필요할까?
  • 명령 라인(명령 프롬프트)에서 위 코드를 java명령어로 실행하면 JVM은 길이가 0인 Strign배열을 먼저 생성하고 main()메소드를 호출할 때 매개값으로 전달한다.
  • main()메소드는 String[ ] args 매개 변수를 통해서 명령 라인에서 입력된 데이터의 수(배열의 길이)와 입력된 데이터(배열의 항목 값)를 알 수 있게 된다.

예제 1

 

  • 위 예제 1을 그냥 실행하면 '값의 수가 부족합니다' 라는 결과 값을 얻는다.
  • 실행할 때 매개값을 주지 않았기 때문에 길이 0인 String 배열이 매개값으로 전달되어 if문의 조건이 true가 되었기 때문이다.

 

 

같은 예제를 인텔리제이 [Run] - [Run Confiurations] 를 통해 arguments 값 (즉, 매개값) 을 10 20 으로 준다면 '10+20=30' 이라는 결과값을 도출할 수 있다.

 

명령 프롬프트에서 실행한다면 아래와 같은 형식으로 입력하면 된다.

[JDK 11이후 버전] java -p . -m 프로젝트파일명/pakage명.소스코드명 매개값1 매개값2

 

 

6. 다차원 배열

  • 행과 열로 구성된 2차원 배열

 

http://www.tcpschool.com/c/c_array_twoDimensional

 

int[ ][ ] scores = new int [2][3];

scores.length // 2

scores[0].length // 2

scores[1].length // 3

 

예시)

int[ ][ ] scores = { {95, 80}, {92, 96} };

int score = scores[0][0]; //95

int score = scores[1][1]; //96

 

 

7. 객체를 참조하는 배열

  • String[ ] 배열는 각 항목에 문자열이 아니라, String 객체의 번지를 가지고 있다.
  • 즉, String[ ] 배열은 String 객체를 참조하게 된다.
  • String[ ] 배열 항목 간에 문자열을 비교하기 위해서는 == 연산자 대신 equals()메소드를 사용해야 한다.
  • ==연산자는 객체의 번지를 비교하기 때문에 문자열을 비교하는데 사용할 수 없다.
  • 이 내요은 [05] Java 참조 타입 글 참고하기 ! https://leejincha.tistory.com/80

 

8. 배열 복사

배열은 한 번 생성하면 크기를 바꿀 수 없기 때문에 새로운 배열을 생성해서 항목 값을 복사해 주어야 한다.

 

① for문으로 배열 복사

 

② System.arraycopy()로 배열 복사

 

https://jwprogramming.tistory.com/120

 

 

 


연습문제 1 > for 문을 이용해서 주어진 배열의 항목에서 최댓값을 구하세요.

연습문제 2 > 중첩 for 문을 이용해서 주어진 배열의 전체 항목의 합과 평균값을 구하세요.

※ 위의 문제에서 count 변수를 선언한 이유는 평균을 구하기 위함이다. count++를 통해 for문이 돌 때마다 횟수를 얻음으로써 전체 객체 수를 구할 수 있다.

'Coding > Java' 카테고리의 다른 글

[09] Java 클래스 - 객체 지향 프로그래밍  (2) 2022.11.22
[08] Java 열거 타입  (0) 2022.11.12
[06] Java 참조 타입  (0) 2022.11.11
[05] Java 조건문과 반복문  (0) 2022.11.11
[04] Java 연산자와 연산  (0) 2022.11.11

+ Recent posts