ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java-12] 자바 배열
    Java 2020. 11. 20. 17:56

    Java Array

     

    바로 본론으로 들어가자,

     

    1. 배열 (Array)

     

    배열은 원시타입이나, 참조타입으로 구성된 특별한 객체 이다. 배열에 담기는 값들은 배열의 타입에 의해서 결정이 되고, 배열의 넘버링, 즉 사이즈는 0부터 시작되고, 배열에 들어가는 데이터로 사이즈가 결정이 됩니다. (배열에 들어가는 원소의 수가, 배열의 수가 된다.) 또한 배열을 생성할 때, 명시적으로 배열의 사이즈를 결정해줄 수 있습니다.

    배열의 원소로 들어가는 타입은 대부분 자바에서 유효한 (valid 한) 타입으로 들어가고, 배열의 타입도 포함 가능합니다. 이 말은, Java 가 배열안에 배열을 만드는 ‘다차원’의 배열의 종류도 지원을 해준다는 뜻 입니다. 


    2. 배열 타입(Array Type)

     

    배열 유형은 자바 클래스와 마찬가지로 참조 타입입니다. 그래서  배열은 클래스의 인스턴스와 마찬가지로 객체이다. 클래스랑 다르게, 배열의 타입은 굳이 정의할 필요없이, 간단하게 원소 타입 뒤에 대괄호 ‘[ ]’ 붙히면 됩니다. 예를들어서 밑의 사진을 보면서 어떻게 배열을 정의하는지 확인해 보자.

     배열 타입은 클래스가 아니다.

     

    하지만, 배열의 인스턴스들은 Obejcts(객체)이다. 무슨 의미냐면, 배열은 ‘java.lang.Objects’ 에 상속 받는다. 그래서 배열은 ‘Cloneable interface’ (객체 자신의 메모리를  복사하는 Object의 인터페이스)를 implement 받는다.

    그리고 CloneNotSupportedException 을 따로 throw로 예외처리를 해주지않고도 완벽하게 보장하는 clone() 메소드를 오버라이딩 하나다.

     

     배열 의 직렬화

     

    배열은 또한 ‘Serializable (자바의 직렬화, 자바 시스템 내부에서 사용되는 Object , Data를 외부에서 사용할 수 있게 바이트 형태로 변환하는 기술, 즉 JVM에서 데이터를 저장하는 스택, 힙에 쌓여있는 데이터를 바이트 형태로 변환한다고 생각하면 된다.)’ 인터페이스를 implements 한다. 그러므로 배열을 직렬화 시킨다면, 어떤 배열이든 직렬화가 가능하다. 

    Array type widening conversions

    Array (배열)은 기본적으로 ‘Object’를 상속 받고, ‘Cloneable’ 과 ’ Serializable’ 인터페이스를 implements 하기 때문에, 모든 배열 타입은 다음 세가지 유형중 하나로 변경이 확장 할 수 있다. 하지만 특정 배열 타입은 다른 배열 타입으로 확장할 수 있다. 만약, 어떠한 배열이 T 라는 레퍼런스 타입을 타입으로 지정하고 있고, T타입에서 S타입으로 할당 할 수 있다면,T[ ] 배열은 S[ ] 배열로 할당 할 수 있다. 

    예를 들어서 ,  

    이런식으로 범용성을 넓힐 수 있다. 

     

    3. C언어 와의 호환성 (C compatilbility Syntax)

     

    앞에서 설명을 했는데, 우리는 정말 간단하게, 타입 뒤에 대괄호를 ‘[ ]’ 붙이면, 쉽게 배열을 선언할 수 있다. 하지만 자바에서, 타입 뒤에 [ ] 붙이는것 뿐만 아니라, C언어와의 호환성을 대비하여, 변수 뒤에도 [ ] 를 붙일 수 있게 하였다. 이런 선언 방식은, 메소드 파라미터나, 필드, 지역변수에서 활용할 수 있다.

    사실 이런 호환성에 문법은 찾아보기 어렵다. 그래서 자바표준 문법에 맞게 쓰는걸 추천한다. 

     

    4. 배열의 선언 및 초기화

     

    배열 크기 선언

     

    자바에서 배열을 생성하기 위해서 우리는 객체를 생성할 때와 마찬가지로 ‘new’ 키워드를 사용하여야 한다. 근데, 배열에는 생성자가 존재하지 않는다. 하지만 우리는 배열을 생성함에 있어, 배열의 크기를 지정해줄 수 있다. 배열의 크기를 지정하기 위해서는 대괄호 [ ] 안에, 정수 값을 집어 넣어주면 된다. 

    주석이 잘 보이지 않는데 참고하면 좋다. 

    자 이렇게 초기화를 해준다면, 그 안의 값들은 어떻게 정의가 될까? 먼저 이렇게 배열의 길이를 설정을 해준다면, 배열이 자동적으로 똑같은 value 로 값을 디폴트로 지정해준다. 

    배열 값 초기화

     

    배열을 초기화 하기 위해서는 먼저, 원소 값이랑 일치하는 선에서 대괄호 [ ] 뒤에 curly braces { } 를 넣어서 값들을 집어 넣으면 가능하게 된다. 

    이런식으로 배열을 정적 사이즈가 아니라 동적사이즈로 넣은 다음에, 다음과 같이 brace안에 넣으면 안에 들어간 원소값과 배열의 크기가 같아진다. 

    배열을 선언하고 사용하는 방법은 너무 많은데, 일단 여기서 끝내고 자바가 아나라 배열만 가지고 사용하는 법에 대해서 알아보도록 하자 다음에, 

     

    'Java' 카테고리의 다른 글

    [Java-14] 비트 연산자와 쉬프트 연산자  (1) 2020.11.27
    [Java-13] 자바 산술 연산자  (0) 2020.11.27
    [Java-11]타입추론 var  (1) 2020.11.20
    [Java-10]변수의 스코프&라이프타임  (0) 2020.11.20
    [Java-9] 타입변환, 형변환  (0) 2020.11.18

    댓글

Designed by Tistory.