티스토리 뷰

Java/기본

011. 자바 : 참조자료형 : 배열

따강아지 2022. 2. 27. 23:36

참조 자료형

기본적으로 java.lang.Object가 최상위 객체로, 개발자가 Object를 상속 받아서 정의 할 수 있습니다.

Type 설명
배열 ( Array Type )
기본형으로도 만들 있고 참조형으로 만들 있음
Enum Type byte
열거형,
String 클래스와 마찬가지로 불변의 객체,
상수의 집합을 만들거나 특정 객체의 상태를 모아서 열거형을 만듦
Class Type String Class
참조형에 속하지만 기본적인 사용은 기본형처럼 사용
불변하는immutable 객체
String 클래스에는 값을 변경해주는 메소드들이 존재하지만 해당 메소드를 통해 데이터
바꾼다 해도 새로운 String 클래스 객체를 만들어내는 것
String 객체간의 비교는 .equals() 메소드를 사용
Wrapper Class
기본형에 null을 넣고 싶다면 래퍼 클래스Wrapper Class를 활용  기본형  대응 래퍼 클래스
byte -> Byte,  short -> Short, int -> Integer, long  -> Long
float -> Float,  double -> Double  char -> Char  boolean -> Boolean

1. 배열

동일한 자료형을 그룹(묶음)으로 저장하는 것으로 생성 시점에 크기를 지정해야 하며 크기가 지정 되면 변경 될 수 없습니다. 배열도 Stack에 저장 되므로 초기화 후 사용 해야 합니다.  ( 배열 객체를 생성 해야 한다는 의미 입니다. )

1. 배열 선언  : 자료형[] 변수명;

2. 배열 객체 생성
: 배열 참조 변수은 Stack에 저장 되고 실제 데이터는 Heap에 저장 됩니다.

3. 다양한 배열 선업 방법
// 선언과 동시에 객체 생성
int[] arrayNum = new int[10];

int arrayNum[] = new int[10];

// 선언과 객체 생성 분리
int[] arrayNum;
arrayNum = new int[10]

int arrayNum[];
arrayNum = new int[10'​

4. 배열에 값 대입
- 배열의 요소는 0부터 시작 하므로 값을 넣을 때는 0부터 넣어야 합니다. 배열의 크기는 0을 포함한 크기로 int[3]은 "배열의 크기는 3, 즉 3개의 값이 저장" 됩니다. 

int[] arrNum = new int[3]
arrNum[0] = 10;
arrNum[1] = 20;
arrNum[2] = 30;

- 배열에 값을 대입 하는 방법중 하나로 크기를 지정 하지 않고 직접 저장 하는 것을 강제 초기화라 하며 선언 후 각 요소 값을 넣는 방법과 동일 한 결과가 됩니다. ( 정수형 배열로 크기는 3 )

int[] arrNum = {10,20,30}
int[] arrNum = new int[]{10,20,30}


5. 배열 객체 생성시 강제 초기화
배열은 선언 후 객체 생성을 하지 않고 사용 하면 오류가 발생 하므로 반드시 객체를 생성 해야 합니다. 배열 객체를 생성 할 떄 요소에 값을 설정 하지 않으며 강체 초기화가 발생 합니다.

- 초기화 하지 않으면 오류 발생

int num ;
int[] arrayNum ;
// Variable 'num' might not have been initialized
System.out.println("기본 자료형 : " + num);  
// Variable 'arrayNum' might not have been initialized
System.out.println("참조 저료형 배열 : " + arrayNum);

// 아래와 같이 초기화 하여야 오류가 발생 하지 않습니다.

int num = 0;
int[] arrayNum = null;
System.out.println("기본 자료형 : " + num);                // 0
System.out.println("참조 저료형 배열 : " + arrayNum);       // null

- 배열 객체 생성만 하고 사용 하는 경우 선언한 타입에 따라서 값이 설정 되므로 오류가 발생 하지 않습니다. 이것을 강제 초기화라 합니다.

public class ArrayInit {
   public static void main(String[] args) {

      boolean[] isArray = new boolean[2];
      int[] numArray = new int[2];
      double[] doubleArray = new double[2];

      System.out.println("boolean[] : " 
      			+ Arrays.toString(isArray));    // [false, false]
      System.out.println("int[] : " 
      			+ Arrays.toString(numArray));       // [0, 0]
      System.out.println("double[] : " 
      			+ Arrays.toString(doubleArray)); // [0.0, 0.0]
      
   }
}


6. 배열 복사는 참조 주소를 공유 합니다.

- numA는 stack에 10을 저장 하고 numB는 numA에서 값을 할당 받아서 가지고 있어서 numB를 20으로 저장 하면 각각 다른 값을 가지는 있습니다. 즉 기본 자료형은 복사를 하면 값이 복사 됩니다.
- numArrayA를 정수형 배열과 선언 하고 초기화 한 후 numArrayA를 numArrayB에 저장 하는 stack에 있는 numArrayA가 가지고 있는 값 실제 데이터이 주소를 numArrayB에 저장 하게 됩니다. 그 후 numArrayB의 요소를 변경 하면 numArrayA이 실제 주소의 값이 변경이 되는 것 입니다. 

7. 배열 값 읽어오는 방법 
- 요소 하나 씩 읽어 오기 : [ 요소번호 ]
- 배열에 있는 모든 요소를 읽어 오기 : Arrays.toString(배열참조변수)
- 반복문을 이용 해서 읽어 오기 : for ( ; ; ), for ( : )

public class ArrayRead {
   public static void main(String[] args) {
      int[] numArray = new int[] {10,20,30};

      // 요소 하나씩 읽어 오기
      // 배열에 있는 2번 째 요소를 읽어 온다.
      int num = numArray[2];
      System.out.println("num : " + num);

      // 베열에 있는 모든 요소를 String 로 변환 한다.
      String numStr = Arrays.toString(numArray);
      System.out.println("num : " + numStr);

      // 배열의 요소를 하나씩 읽어 오기
      // 배열의 길이-1 까지 반복문을 사용
      int numArrayLength = numArray.length;
      for ( int i = 0; i < numArrayLength; i++) {
         System.out.println(String.format("배열 %d 번째 값 %s", i, numArray[i]));
      }

      // for-each 문을 이용 해서 읽어 오기 
      for(int value: numArray) {
         System.out.println(String.format("배열 값 %s",  value));
      }
   }

}

* for 문을 이용 해서 순환 하면서 읽어 오는 경우 전통적인 방식은 for ( ; ; )문 보다는 foreach 형태의 for( : )을 사용 하는 것을 권장 한다, foreach 형태를 요소의 타입으로 직접 접근 해서 사용 하므로 모든 참조 자료형에 사용 하는 경우 형 변환을 하지 않아도 되는 장점과 for (  ;  ;  ) 사용시 for 문의 지역 변수를 수정 해서 발생 할 수 있는 오류를 줄일 수 있다.  
* for (int i = 0; i < 10; i++) { .. } 에서 지역 변수 i의 값을 인위적으로 변경 하면 예상 하는 데이터가 나오지 않을 수 있다.


소스 : https://github.com/hyomee/JAVA_EDU/tree/main/Variable/src/com/javavariable/array

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com

 

'Java > 기본' 카테고리의 다른 글

013. 자바 : 참조자료형 : 문자열  (0) 2022.03.01
012. 자바 : 2차원 배열  (0) 2022.03.01
010. 자바 : 기본 자료형  (0) 2022.02.27
009. 변수  (0) 2022.02.27
008. 콘솔에 출력 하기  (0) 2022.02.25