◎원시형 : 값을 표현하기 위한 자료형 - byte, short, int, long, char, float, double, boolean
◎참조형 : 특정 대상을 표현하기 위한 자료형 - 배열(Array), 클래스(Class), 인터페이스(Interface), 열거형(Enum)
◎참조변수 : 참조형으로 생성된 변수 - 특정 대상의 메모리 주소값을 저장하기 위한 변수
ex) String name="홍길동";
→ 힙영역에 생성된 배열 또는 객체의 메모리 주소를 저장하여 접근하기 위해 사용
→ 참조변수는 비교연산자를 사용할 경우 메모리 주소 비교
→ 참조변수에 배열 또는 객체를 저장하지 않을 경우 기본값으로 null(존재하지 않는 값을 표현하는 키워드) 저장
🐧프로그램에서 사용하는 메모리 영역
→ 정적영역(Static Area) - 메소드영역(Method Area), 힙영역(Heap Area), 스택영역(Stack Area)
1.정적영역(Static Area) : 클래스 파일(XXX.class)의 Java 자료형을 읽어 저장하는 메모리 영역
2.힙영역(Heap Area) : 배열 및 객체가 저장되는 메모리 영역 - new 연산자 사용
→ 메모리에 이름 설정 불가능 : 참조변수 필요
3.스택영역(Stack Area) : 지역변수(기본변수 또는 참조변수)가 저장되는 메모리 영역
→ 일괄처리를 목적으로 사용하기 위한 자료형
→ 1차원 배열과 다차원 배열(2차원 배열, 3차원 배열 등)로 구분
→ 1차원 배열 : 다수의 값을 저장하기 위한 자료형, 다차원 배열 : 다수의 배열을 저장하기 위한 자료형
package basic;
public class ArrayApp {
public static void main(String[] args) {
//1차원 배열을 생성하여 참조변수에 생성된 배열의 메모리 주소(HashCode)를 저장
//형식)자료형[] 참조변수=new 자료형[갯수];
//→ new 자료형[갯수] : 자료형의 값을 갯수만큼 저장 가능한 배열 생성 - 힙영역
//→ 자료형[] 참조변수 : 1차원 배열의 메모리 주소를 저장하기 위한 참조변수 생성
//→ "자료형 참조변수[]" 형식으로 참조변수 생성 가능
//1차원 배열은 다수의 값을 저장하기 위한 요소(Element)의 모임
//→ 배열의 요소는 첨자(Index : 0부터 1씩 증가되는 정수값)를 이용하여 구분
//→ 생성된 배열의 요소에는 기본값(논리형:false,숫자형:0,참조형:null)이 초기값으로 자동 저장
int[] num=new int[3];
//참조변수에 저장된 값을 "자료형@메모리주소" 형식으로 제공받아 출력
System.out.println("num = "+num);
System.out.println("====================================================");
//참조변수와 배열의 요소를 구분하는 첨자를 사용하여 배열 요소에 접근하여 사용
//형식)참조변수[첨자] - 배열의 요소를 표현하는 방법
System.out.println("num[0] = "+num[0]);//요소값 출력
System.out.println("num[1] = "+num[1]);
System.out.println("num[2] = "+num[2]);
//배열의 요소를 구분하는 첨자를 잘못 사용한 경우 ArrayIndexOutOfBoundsException 예외 발생
//→ 예외(Exception)가 발생된 경우 프로그램 강제 종료
//System.out.println("num[3] = "+num[3]);
System.out.println("====================================================");
//참조변수.length : 참조변수에 저장된 배열 요소의 갯수를 표현하는 방법
System.out.println("배열 요소의 갯수 = "+num.length);
System.out.println("====================================================");
int index=0;
//배열 요소를 구분하는 첨자는 변수 또는 연산식으로 표현 가능
num[index]=10;//요소값 변경
num[index+1]=20;
num[index+2]=30;
//for 구문을 사영하여 배열 요소에 대한 일괄 처리
//→ for 구문의 초기식,조건식,증감식에서 사용하는 변수로 첨자를 표현하여 일괄 처리
//→ 입력,계산,출력에 대한 일괄처리에 사용
for(int i=0;i<num.length;i++) {
System.out.println("num["+i+"] = "+num[i]);
}
System.out.println("====================================================");
//배열 생성시 배열 요소에 기본값 대신 원하는 초기값 저장 가능
//형식)자료형[] 참조변수=new 자료형[] {초기값, 초기값, ... };
//→ 블럭({}) 안에 나열된 초기값의 갯수만큼의 요소를 가지고 있는 배열 생성
int[] su1;
su1=new int[] {10,20,30};
for(int i=0;i<su1.length;i++) {
System.out.println("su1["+i+"] = "+su1[i]);
}
System.out.println("====================================================");
//블럭({}) 안에 초기값을 나열하여 배열 생성 가능
//형식)자료형[] 참조변수={초기값, 초기값, ... };
//→ 참조변수를 생성해야만 배열 생성 가능 - 참조변수 생성 후 배열 생성 불가능
int[] su2={10,20,30};
//배열을 일괄처리하기 위한 변형된 for 구문
//형식(자료형 변수명:참조변수) { 명령; 명령; ... }
//→ 참조변수에 저장된 배열의 요소값을 차례대로 제공받아 변수에 저장하여 반복 처리
//→ 배열의 모든 요소값을 제공받은 후 반복문 종료
//→ 계산,출력에 대한 일괄처리에 사용
for(int temp:su2) {
System.out.println(temp);
}
System.out.println("====================================================");
int[] array={54,70,64,87,96,21,65,76,11,34,56,41,77,80};
//배열의 모든 요소들의 값에 대한 합계를 계산하여 출력
int tot=0;
for(int i=0;i<array.length;i++) {
tot+=array[i];
}
System.out.println("합계 = "+tot);
System.out.println("====================================================");
//배열의 요소값이 30~60 범위의 정수값인 요소의 갯수를 계산하여 출력
int count=0;
for(int element:array) {
if(element>=30 && element<=60) {
count++;
}
}
System.out.println("30~60 범위의 요소 갯수 = "+count);
System.out.println("====================================================");
}
}