24.02.13 Java 관련 4
1. try catch
- 예외가 발생할 수 있는 부분을 try 블럭에 넣고 예외가 발생시 catch 블럭에서 처리하는 방법
1) 유의 사항
- try catch 문을 통해 예측 가능한 예외를 처리해주는 것도 중요하지만 예외 발생시 try 블럭내의
나머지 코드들이 수행되지 않는 다는 점을 유의해서 코드를 작성해야 함
- 모든 예외는 Exception 클래스의 자손이기에 catch 블럭 최상단에 Exception 을 선언하면 어떤 에러든
해당 catch 블럭에서 처리됨
2. throw exception
- 의도적으로 예외를 발생시키는 것으로 특정 로직에서 특정 예외를 상위 클래스에서 공통으로 예외 처리를
하기 위해 사용
3. String
- 불변성을 가진 객체
- + 나 문자열을 수정, 삽입하는 경우 새로운 문자열을 생성
- 변하지 않는 문자열을 자주 사용할 경우 사용
4. String Buffer, String Builder
- 문자열 객체를 버퍼에 임시로 저장
- 수정, 삭제, 삽입 시 버퍼에 저장된 문자열 객체를 수정하고 ToString( ) 메서드로 문자열을 반환
1) 차이점
(1) String Buffer
- 동기화를 지원하기 때문에 멀티 스레드 환경에서 사용
- 멀티 스레드 환경과 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우 사용하면 성능면에서 유리
(2) String Builder
- 동기화를 지원하지 않기때문에 단일 스레드환경에서 사용되며 String Buffer 보다 속도면에서 성능이 좋다
- 단일 스레드 환경과 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우 사용하면 성능면에서 유리
5. Map 인터페이스 종류
1) Map
- Key 와 Value 의 집합 구조이며 중복을 허용하지 않음
- 키의 중복을 허용하지 않으며 순서를 저장하지 않는다
- Red-Black Tree 알고리즘 이용
2) HashMap
- Map 인터페이스를 따르며 맵의 특징을 가져감
- HashTable 을 이용해 Key 와 Value 값을 저장
3) TreeMap
- 중복을 허용하지 않고 Key 값들에 대한 정렬을 이룬다
4) HashTableMap
- Key 와 Value 값에 Null 을 허용하지 않음
5) LinkedHashMap
- 저장 순서를 유지
6. Array 와 LinkedList
1) Array
- 선언할때 Size 고정
- 각 데이터 요소들은 인접한 위치에 저장
- 데이터를 읽을 때 index 를 통해 읽기 때문에 조회 속도가 빠르다
- 삽입, 삭제가 일어날 때 데이터들은 삭제나 삽입이 일어난 index 보다 큰 인덱스 값을 모두 이동시켜야 하기 때문에 O(n) 을 가짐
2) LinkedList
- 자료의 주소값을 가지는 노드가 인접해 있는 노드의 위치를 가르키고 있는 구조
- 가르키는 위치만 변경하면 되기 때문에 삽입, 삭제시 시간 복잡도가 O(1)
- 데이터를 조회할 때 루트노드부터 순차적으로 탐색
7. Stack 과 Queue
1) Stack
- 후입 선출의 구조
- top 을 통해서만 삽입과 삭제가 이루어짐 (입구가 하나)
- 후위표기식, 괄호검사, 역순문자열, 웹 브라우저 방문기록(뒤로가기) 에 활용
2) Queue
- 선입 선출의 구조
- 삭제 연산이 되는 front, 삽입 연산이 되는 rear 2가지 방향이 존재
- 순차적 업무에 활용
8. Java 버전별 특징
1) Java 8
(1) 람다 표현식
boolean isReal = list.stream().anyMatch(u -> User.isRealUser(u));
위를 메서드 참조로 변경하면
boolean isReal = list.stream().anyMatch(User::isRealUser);
(2) Stream
(3) Optional
(4) 정적 메소드 참조
2) Java 11
(1) String 메소드 추가
A) strip( ) : 문자열 앞, 뒤의 공백 제거
B) stripLeading( ) : 문자열 앞의 공백 제거
C) stripTrailing( ) : 문자열 뒤의 공백 제거
D) isBlank( ) : 문자열이 비어있거나, 공백만 포함되어있는 경우 true 반환
String.trim( ).isEmpty( ) 결과와 동일
E) repeat(n) : n 개만큼 문자열을 반복하여 붙여서 반환
(2) 기본 GC 는 G1 GC
(3) 람다에서 로컬변수 Var 사용