[JAVA 더 깊게] JAVA One Paper
[JAVA 더 깊게] JAVA One Paper
객체지향과 자바
객체지향에서는 모든것을 객체로 표현하고 다룬다.
자바는 이러한 객체지향에 유리한 상속,다형성,인터페이스라는 개념을 잘 정립했다.
객체들을 다루기 위한 다양한 라이브러리들을 제공한다.
- 프로그래밍에 기본 기능을 제공하는 클래스들이 담겨있는
java.lang 패키지
*Object
모든 클래스들의 최고 조상 (기본 상속)
clone,equals,hashCode,toString 등 메서드 정의
얕은복사, 주소비교, 주소를 해시값, 해시값반환 으로 기본 정의 되어있음
필요시 하위에서 재정의해야함 ex) 깊은복사,값비교
*String
- "+" 연산 수행시 새 인스턴스 생성 (별도의 저장공간 및 주소지)
- Object의 메서드들을 재정의하고있음 (equals , toString 등)
- 문자열을 다루는 메서드를 제공 (split , format, parseInt 등)
StringBuffer
내부 버퍼를 이용해서 문자열의 내용을 변경할수있도록 설계되어있음
문자열 내용 변경이 많은 작업시 String 대신 사용
equals가 재정의 되어있지 않음, toString은 재정의 되어있음
비교 필요시 toString사용해서 String으로 변환후 equals 적용
Math
- 수학계산에 유용한 메서드들을 지원
*Wrapper
- 원시타입(int,float,double 등)을 객체(참조타입)로 다뤄야하는 경우사용
Object 클래스 메서드를 사용할수있게 됨 (equals 등 사용가능)
- 원시타입을 내부적으로 저장
- equals, toString, compareTo 등 Object 클래스 메서드들을 재정의 하고있다.
프로그래밍에 도움이 되는 기능을 제공하는 클래스들이 담겨있는 java.util 패키지
*Objects
- java.lang의 Object 최고 클래스를 보조하는 클래스
- null-check 기능을 추가해서 Object의 메서드들을 재정의하고있다.
- deepEquals 등 추가 메서드도 제공
- isNull,requireNonNull 등 NPE 방어 메서드들도 제공
Random
- 난수를 얻기위한 메서드들을 제공
Regex
- 정규식과 관련된 클래스
- 특정 형식이나 패턴을 보유하는 문자열을 추출하는데 쓰인다.
StringTokenizer
- 문자를 구분자를 이용해 나누는 기능을 제공
- split보다 직관적이고 토큰의 개념을 사용하기때문에 사용하기 편함
구분자를 1개만 적용
할수있기 때문에 여러가지 구분자를 사용해야 하는경우엔정규식
을 사용
객체 군집을 다루는 컬랙션 프레임워크
in java.util 패키지
컬랙션 프레임워크 상속 계층도
자바 컬랙션 프레임웤 상속도
컬렉션 프레임워크 핵심 인터페이스
- List
- Set
- Map
- 구조상의 차이로 인해
Map 인터페이스
는 Collection을 상속 x
List Interface
중복을 허용
하면서저장 순서가 있는
컬랙션에 사용구현 클래스
: LinkedList , ArrayList , Stack 등LinkedList : 노드를 이용해 연결구조를 가진다. 데이터 중간 삽입삭제 유리
ArrayList: 일반적인 배열의 특성을 갖는다. 데이터 조회 유리
Stack: 후입선출
Queue Interface
- 큐 인터페이스
구현 클래스
: LinkedList , PirorityQueue자손 인터페이스
: DequeLinkedList: 큐는 선입선출로 pop시 요소 이동이 필요하기때문에 LinkedList Class도 큐를 구현하고있음
Deque interface: Queue를 상속받고있는 인터페이스
구현 클래스
로 ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 등의 클래스가 있다.
Set Interface
중복을 허용하지 않고
저장순서가 없는
컬랙션에 사용한다.구현 클래스
: HashSet, Sorted Set , TreeSetHashSet: 해시 집합 동일 데이터 삽입시 기존 데이터 갱신
TreeSet: 트리구조를 띄는 집합
Map Interface
key & value를 하나의 쌍으로 묶어서 저장하는 컬렉션을 구현하는데 사용
된다.- key는 unique하며 value는 중복을 허용한다.
- 기존 데이터와 동일한 key값의 데이터를 넣으면 기존 데이터가 최신화 된다.
구현 클래스
: HashMap , TreeMap등HashMap: key&Value를 이용한 해시
TreeMap: key&Value를 이용한 트리
Map.Entry Interface
에 엔트리를 다루는 메서드 정의Map Interface 구현 클래스들도 모두 내부에 Map.Entry Interface를 구현하는 내부 Entry 클래스 보유
엔트리란
Map에 저장되는 K&V 를 가지는 일종의 노드
- 컬랙션 반복자
Iterator
injava.util 패키지
Iterator는 Collection Interface 구현 클래스만 쓸수있다.
Collection Interface
는Iterator Interface
를 상속하는Iterable Interface를 상속
하고 있다.Collection Interface를 상속하는 인터페이스
(List, Set)를 구현하는모든 클래스
들은Iterator를 구현
하고있다.Map
은Collection Interface
를 상속하지 않고있기 때문에 사용할수없다.KeySet()이나 entrySet() 같은 메서드롤 통해 키와 값을 따로 Set 형태로 얻어서 Iterator를 이용할수있다.
정렬기준을 결정하는 Comparator & Comparable Interface
in java.util 패키지
Integer와 같은 Wrapper 클래스나 String,Date 등
서로 비교가 가능한 클래스
들은기본으로 Comparable을 구현
하고있다.사용자 정의 클래스도 기본 정렬 기준을 정의할때 Comparable를 구현해야한다.
Comparable 과 Comparator 차이
- 기본정렬 기준을 사용해 정렬할때는 Comparable
- 기본 정렬 기준이 아니라 새로운 정렬기준을 가지고 정렬하고 싶을땐 Comparator
ex) Arrays.sort 에서 정렬 기준
스트림 sorted에서도 사용된다.
- Arrays.sort는 Comparator를 지정하지 않으면 요소 객체에 구현된 Comparable 구현 내용을 따른다.
Arrays.sort(strArr); //String[] strArr 즉, String이 구현하고있는 compareTo를 따른다.
- Comparator를 인자로 넘겨주면 정렬할때 직접 만든 정렬 기준을 적용할수있다.
Arrays.sort(strArr, (s1,s2) -> s1.compareTo(s2)*-1); //람다를 이용해 Comparator 정의
자세한건 여기
배열과 컬랙션을 쉽게 다루게 해주는 클래스 Arrays & Collections
in java.util 패키지
Static class 임으로 인스턴스 없이 사용
이 가능하다.
Arrays
- 배열을 복사,채우기,정렬,이진탐색,비교,Collection List로 변환 등의 메서드 지원
//배열을 Collection List로 변환 String[] str = ["a","b"]; List<String> list = Arrays.asList(str); //정렬 Arrays.sort(str);
Collections
- 컬랙션에 읽기전용,동기화,싱글톤,객체제한 등의 기능을 부여하는 메서드를 제공한다.
List list = Collections.checkList(list,String.class);