Java Syntax - (5)1차원 배열

가빈·2023년 12월 6일
post-thumbnail

드디어 배열을 들어갈 차례다
이것도 알다가도 까먹는 것들이 많다 하지만 내용도 중요하지만 적용방법에 집중하는 것이 좋다!

  • 복습 체크

1차원 배열(타입) 특징 요약

  1. 동일한 자료형만묶어서 저장 가능 → 반대로 어떤 타입인지 알아야함

  2. 생성시 크기를 지정(지정 후에는 변경 불가)

  3. 선언 : 자료형[ ] 변수명 or 자료형 변수명 [ ] *왼쪽타입 추천

  4. null은 참조변수 값의 초기값(가리키는 객체가 없다는 것)

    → 참조자료형의 실제 값은 heap에 저장한다 하지만 값이 없다면 stack에 null로 표현한다(stack은 빈칸으로 존재O, 힙메모리는 빈칸존재X)

    강제초기값 참고

❌ int[ ] a; 와 int a 는 다르다!!! 인트 배열인 참조자료형 타입이지 기본자료형이 아님


1차원 배열의 객체 생성

: 여러개의 값을 저장 할수 있는 공간을 생성 + 힙메모리에 생성(진짜값)

int [ ] a;
a = new int [3];  // new 자료형[ 배열의 길이 ]

// new는 힙 메모리에 넣어라의 의미
//자료형 [배열의 길이]는 int 3개를 저장할 수 있는 방3개를 만들어달라

자바 완전정복 영상중,자바완전정복 영상중..

new 키워드

  • JVM이 비워놓은 공간에 객체(저장공간)을 생성
  • 어느 공간인지 알 수 없기 때문에 객체의 위치정보(주소)를 리턴해줘야 함
  • 리턴된 값을 참조 변수에 저장
    ->a [0] : a가 가리키는 곳에 0번째 방(index)을 보라는 의미


배열 객체의 값 읽기

여러가지 배열 객체 생성 및 값 대입

참조변수명 [ 인덱스번호 ]

a [0] =3; : a가 가리키는 곳에 0번째 방(index)을 보면 3이 있다 *실제값은 3

여러가지 배열 객체 생성 및 값 대입

방법 1 : 배열 객체 생성 + 값 대입

자료형 [] 참조변수명 = new 자료형 [배열의 길이];
참조변수명[0] =;
참조변수명[1] =;
...
참조변수명[배열의 길이 -1] =//0번째부터 인덱스 나열하므로! -1

int [] a = new int[3];
//첫번째줄부터 힙에는 값이 0으로 설정된다(강제초기화)
a[0] = 3;
a[1] = 4;
a[2] = 5;

방법 2: 배열 객체의 생성 및 값 대입

자료형 [] 참조변수명 = new 자료형[] {1,2,3,...};
//new 자료형[]에서 배열의 길이를 작성하지 않는다
//배열의 길이를 {값,값...값}으로 개수 표현하기 때문이다

int [] a = new int[]{3,4,5}; //방법1의 0으로설정이 생략된다

방법 3: 대입할 값만 입력

자료형 [] 참조변수명 = {1,2,3,...};
// new 자료형[] 생략
int[] a = {3,4,5};
//좌변으로 자료형 파악, 참조자료형으로 힙에 저장하므로 생략하게 됨

*방법 1 vs 방법 2 vs 방법 3

방법 1은 배열의 값을 미리 알고 있을 수 없는 경우에 유리

방법 2는 배열의 값을 이미 알고 있는 경우 + 분리 작성에 유리
선언과 값 대입 분리O int[] a; a = new int[]{3,4,5};

방법 3은 분리XX int[] a;a = {3,4,5};//말이 안된다.


⭐️강제 초기값

선언 시에는 int[] a; stack 영역에 a 공간이 비워져 있고

값을 대입 시에는 a = new int[3]; stack a 공간에 참조(주소값)가 되고 heap영역에 3개의 배열 내(방)에 0의 값이 들어간다

정리하자면,,

  • stack에서의 초기값
    빈칸으로 존재 가능하지만 변수는 무조건 Stack에 들어가므로 출력시에는 문제가 발생->참조만 지정이 되었기 때문이다
    int a[];// stack에 아무값도 없음
    System.out.println(a); //오류발생

  • heap에서의 초기값
    빈칸으로 존재 불가하고 초기값이 강제로 설정되기 때문에 출력 가능->실제 값이 디폴트값으로 주어졌기 때문이다

    • 숫자 기본자료형 : 디폴트값 0

    • boolean: 디폴트 값 false

    • 참조자료형 : 디폴트 값 null

      String[] a = new String[3];//힙의 3개 방 안에 	String의 디폴트값으로 null이 입력 된다
      `System.out.println(a);// 오류 안 남
      			```
      
      

배열의 변수 복사(변형)

  • 기본자료형
    int a = 3;
    int b = a;
    b = 7;
    System.out.println(a); //3
    System.out.println(b); //7: 처음에 3으로 stack에 직접 값이 입력 되었지만 7로 바뀌었다
  • 참조자료형
    int[] a = {3, 4, 5};
    int[] b = a;   //a와b는 같은 객체를 가리킨다
    b[0] = 7;      //a[0] = b[0]
    System.out.println(a[0]); //7
    System.out.println(b[0]; //7: 처음에 3으로 heap에 직접 값이 입력 되었지만 b[0] 선언으로 a의 0번째도 7로 바뀌었다

배열의 길이 출력하기

배열참조변수명.length

int[] a = new int[]{1,2,3,4,5};
System.out.println(a.length); //5(개)

a. 의 의미는 a가 가리키는 곳으로 이동 (즉, 참조자료형만 가능)


반복문을 이용한 배열 읽기

  • for 반복문
int[] a = new int[100];
a[0]=1 .... a[99]=100;

for(int i=0; i<a.length; i++){
		System.out.println(a[i]);
}
// i초기값 0이고 a.length(100개)보다 작으면 true, +1씩 증가.
//값이 1~100까지 나온다
  • ⭐️for-each 반복문(배열에 특화) for( 원소자료형 변수 : 묶음 참조자료형 ) { }
    • 원소 자료형변수 : 집합 원소의 변수

    • 묶음 참조자료형 : 배열, 컬렉션 등

      int[] a = new int[100];
      a[0]=1 .... a[99]=100;
      
      for(int k: a){
      		System.out.println(k);
      }
      //여러개인 a원소들을 k로 변환
      //조건식에서 int k는 a의 개별 원소를 하나씩 받을 수 있는 그릇(집합개념과 유사하다)
  • 배열값 출력 정적 메서드
    System.out.println(Arrays.toString(1차원 배열)); System.out,println(Arrays.toString(new int[1,2,3]));
    배열값은 [1,2,3]출력
profile
지금부터 시작!

0개의 댓글