드디어 이번주면 자바의 신 1,2권 멘토링이 마무리 된다.
지금까지 열심히 공부해왔던 자바의 신 책 마지막에 기말고사가 있어 이를 스스로 정리해보고자 한다.
1. String 클래스와 StringBuilder, StringBuffer 클래스의 차이
- 불변이냐 아니냐의 차이, String은 불면의 속성을 가져, 값이 바뀌면 새로운 인스턴스가 생성되고 StringBuilder와 StringBuffer는 그렇지 않다.
- 따라서, 변하지 않는 문자열을 자주 읽어들일 경우 String을 사용하면 좋다.
하지만, 문자열 추가, 수정 등의 연산이 자주 일어나게 될 경우 값이 바뀌어도 하나의 인스턴스로 처리하는 StringBuilder와 StringBuffer를 사용하면 좋다.
- StringBuilder와 StringBuffer 간에도 차이점이 있는데, Thread safe 유무이다.
StringBuffer는 주요 로직이 synchronized로 감싸져있어 Thread safe하지만, StringBuilder는 그렇지 않기에 Thread Safe하지 않다.
2. String 클래스의 indexOf(), substring(), split(), getBytes()의 용도
- indexOf : 특정 문자의 위치 인덱스 반환
- substring : 문자열을 인덱스 기준으로 잘라서 반환
- split : 문자열을 특정 문자열 기준으로 분리해 반환
- getBytes : 문자열을 ByteCode로 인코딩해 반환
3. System 클래스의 주요 용도
4. System 클래스에서 절대 사용하면 안되는 메서드와 이유
- GC를 수행하는 gc(), runFinalization()과 JVM 종료하는 exit() 메서드
- GC 관련된 작업들은 명시적으로 호출하지 않아도, JVM에서 알아서 한다.
- JVM 종료 또한 명시적으로 호출할 필요가 없고, 하면 해당 애플리케이션이 죽어버린다.
5. 제네릭을 사용하는 가장 큰 이유
- 컴파일 시점에 형 변환으로 인한 문제를 사전에 검사하기 위함
6. Set의 용도와 주요 클래스
- 순서 보장이 필요없고, 중복을 방지하고 원하는 값이 포함되어 있는지 확인이 필요한 경우 사용함
- 주요 클래스는 HashSet, TreeSet 등이 있다.
7. Set의 데이터를 하나씩 꺼내는 방법
- iterator 객체를 생성해 next 호출, 또는 for each사용
8. ArrayList와 같은 List와 배열의 차이
- List는 데이터를 저장하는 공간이 꽉차면 가변적으로 증가시켜서 사이즈 지정이 필요없지만, 배열은 사이즈가 고정적이다.
9. Queue의 용도, LinkedList의 특징
- Queue : 순서대로 처리할 필요가 있을 경우 사용함
- LinkedList : 자료 저장을 위해 공간을 미리 할당하지 않고, 추가 필요 시 현재 노드와 새 노드간의 Link(주소)만 할당해 자료를 추가함. 현재 노드는 앞과 뒤에 있는 노드의 위치(주소)만 알고 있음
10. Map의 용도와 주요 클래스
- 자료를 키와 값을 쌍으로 관리해야할 때 사용함. 이때 키는 중복 불가(hash 사용)
- 주요클래스는 HashMap, TreeMap 등이 있다.
11. Arrays 클래스의 용도
- 배열을 다루기 위한 다양한 메서드들이 포함되어 있음
- copyOf, sort 등
12. StringTokenizer 클래스의 용도
- split과 유사하게 문자열 파싱할 때 사용함, 정규표현식으로 파싱함