티스토리 뷰
참조 자료형
기본적으로 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 -> Longfloat -> 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
'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 |