개발자 준비/JAVA

[JAVA 더 깊게] JAVA One Paper

osul_world 2022. 1. 10. 17:10
728x90

[JAVA 더 깊게] JAVA One Paper


객체지향과 자바

객체지향에서는 모든것을 객체로 표현하고 다룬다.

자바는 이러한 객체지향에 유리한 상속,다형성,인터페이스라는 개념을 잘 정립했다.

객체들을 다루기 위한 다양한 라이브러리들을 제공한다.



  1. 프로그래밍에 기본 기능을 제공하는 클래스들이 담겨있는 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
  • 자손 인터페이스: Deque

LinkedList: 큐는 선입선출로 pop시 요소 이동이 필요하기때문에 LinkedList Class도 큐를 구현하고있음

Deque interface: Queue를 상속받고있는 인터페이스

구현 클래스 로 ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 등의 클래스가 있다.



Set Interface

  • 중복을 허용하지 않고 저장순서가 없는 컬랙션에 사용한다.
  • 구현 클래스: HashSet, Sorted Set , TreeSet

HashSet: 해시 집합 동일 데이터 삽입시 기존 데이터 갱신

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 를 가지는 일종의 노드




  1. 컬랙션 반복자 Iterator in java.util 패키지

Iterator는 Collection Interface 구현 클래스만 쓸수있다.

  • Collection InterfaceIterator Interface를 상속하는 Iterable Interface를 상속하고 있다.
  • Collection Interface를 상속하는 인터페이스(List, Set)를 구현하는 모든 클래스들은 Iterator를 구현하고있다.
  • MapCollection 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 정의



자세한건 여기

https://onlyforus-blog.tistory.com/170?category=985817




배열과 컬랙션을 쉽게 다루게 해주는 클래스 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);

728x90