CS 전공지식

24.02.13 Java 관련 4

김용글 2024. 2. 13. 15:44

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 사용