팁 작성에 앞서, 개념을 알기는 하지만 놓칠 수 있는 부분들이나 다시 한 번 복기하면 좋을만 한 것들을 정리해둔 것이기 때문에
처음 공부하시는 분들에게는 적절하지 않을 수 있습니다.
✶ 배열(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 |
댓글