배열 TIP

    팁 작성에 앞서, 개념을 알기는 하지만 놓칠 수 있는 부분들이나 다시 한 번 복기하면 좋을만 한 것들을 정리해둔 것이기 때문에

    처음 공부하시는 분들에게는 적절하지 않을 수 있습니다.

     

    배열(Array) : 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

     

    *선언과 생성

    • 선언

    type[] name;

    • 생성

    name = new type[length];

    • 선언&생성

    type[] name = new type[length];

     

    *배열을 선언하는 것은 참조변수를 위한 공간이 만들어질 뿐이고, 생성해야만 비로소 배열 값의 저장 공간이 만들어지는 것이다.

     

    *배열을 선언할 때는 배열의 크기를 지정할 수 없다.

     

    *배열은 한 번 생성하면 길이를 변경할 수 없다. 즉, ‘배열이름.length’는 상수다.

     

    *배열 선언 없이 일회용 생성

    → new String[] {"ab", "bc"}

    + 문자열 선언 없이 일회용 생성

    → new String( ••• )

     

    *배열의 요소들 한꺼번에 확인하는 법

    System.out.println(Arrays.toString(배열명)); 로 확인 가능

     

    *보통 배열을 그냥 출력하게 되면 ‘타입@주소’의 형식으로 출력되지만 Char 배열의 경우만 예외적으로 구분자 없이 그대로 붙어서 출력된다.(, char 배열명을 단일로 출력할 때만 원소들이 붙어서 출력된다.)

     

    *int 탑입의 경우 기본값이 ‘0’이고 String 타입인 경우 기본값이 ‘null’이다.

    + boolean 의 경우 기본값 : false

     

    *원래 String 은 ‘클래스’이므로 new 연산자를 통해 객체를 생성해야 하지만 ‘String 클래스’만 특별하게 큰따옴표를 이용하여 간략히 표현 가능하다.

     

    *객체지향언어 : 데이터와 기능을 구분하지 않고 함께 묶어서 다룰 수 있다.

     

    *String 의 경우 문자열이 변경될 수 없다. + 연산자를 이용하면 변경되는 것처럼 보이지만 새로운 객체가 생성되는 것이므로 메모리적으로 손해를 본다. 따라서 StringBuffer 또는 StringBuilder 클래스를 이용하면 이를 보완할 수 있다.

     

    *String vs StringBuffer vs StringBuilder

    String : 메모리를 많이 잡아 먹는다.

    StringBuffer : 동기화 키워드를 지원함으로서 멀티쓰레드 환경에서 안정적이다.(String도 불변성을 가지므로 안정적이다.)

    StringBuilder : 동기화를 지원하지 않기 때문에 멀티쓰레드 환경에는 적합하지 않지만 성능은 StringBuffer보다 뛰어나다.

     

    *substring(int a, int b) 메서드를 사용하면 문자열의 일부만 얻을 수 있는데, ‘a’번째 인덱스 이상 ‘b’번째 인덱스 미만의 문자열이 출력된다. ‘b’에 문자열의 길이 이상의 인덱스를 넣어주면 안될 것 같지만 ‘b’번째 미만이므로 문자열의 길이까지 입력을 해주어도 ArraysIndexOutOfBoundsException 이 발생하지 않는다.

     

    *문자열은 클래스이고 객체가 생성되므로 2개의 문자열이 같아 보이더라도 ‘==‘ 연산자를 이용하면 false 가 뜬다. 따라서 equals() 메서드를 이용해야하고 대소문자 구분 없이 비교하는 경우 equalsIgnoreCase()를 사용하면 된다.

     

    *길이가 ‘0’인 배열을 생성하는 법

    메인문에서 커맨드라인에 매개변수를 입력하지 않았을 경우 args.length 의 값 : ‘0’ 이다.

     

    *이클립스에서 커맨드라인 매개변수 입력 방법

    Run - Run Configurations - arguments - Program arguments 에 들어가 입력하면 된다.

     

    *2차원 배열의 선언 및 초기화

    int[][] arr1 = new int[행길이][열길이];

    int[][] arr2 = {{1,2,3}, {4,5,6}, {7,8,9}}; = int[] arr2[] = {{1,2,3}, {4,5,6}, {7,8,9}};

    • 행 별로 줄 바꿈 해주는 것이 보기에 좋고 바람직하기는 하다.

     

    *다차원 배열의 경우 모든 요소를 보려면 “Arrays.deepToString(배열명)” 을 이용하면 된다. 또한 Arrays.equals()의 경우에도 Arrays.deepEquals()를 사용해야 한다.

     

    *배열의 복사 : Arrays.copyOf() or Arrays.copyOfRange()

    배열의 정렬 : Arrays.sort(배열명)

     

    반응형

    'Java > Grammar' 카테고리의 다른 글

    예외처리 TIP  (0) 2022.12.16
    객체지향언어 TIP (2)  (1) 2022.11.30
    객체지향언어 TIP (1)  (0) 2022.11.14
    조건문 & 반복문 TIP  (0) 2022.10.24
    연산자 TIP  (0) 2022.10.24

    댓글