Java - DAY 16

NewTypeAsuka·2023년 2월 27일
0

Java@

목록 보기
17/22

1. Wrapper 클래스 등

Wrapper 클래스

  • 기본 자료형을 객체화 해주는 클래스
  • 기본형을 참조형으로 표현하기 위한 클래스
  • Byte, Short, Integer, Long, Float, Double의 추상 부모 클래스 Number가 있다.
  • Wrapper 클래스가 필요한 이유
    1) 기본 자료형이 제공하지 않는 추가 필드, 메서드를 제공하기 위해
    2) 기본 자료형을 객체로 다뤄야 하는 경우가 있기 때문에(컬렉션)



Boxing과 Unboxing

  • Boxing:
    기본 자료형을 Wrapper 클래스의 객체로 변환하는 것
Double radius = new Double(2.59);
Double radius = Double.valueOf(10.4);
Double radius = 2.59; // 자동 Boxing
  • Unboxing:
    Wrapper 클래스의 객체를 기본 자료형으로 변환하는 것
double r = radius.doubleValue();
double r = radius; // 자동 unboxing

System 클래스

  • 자바 플랫폼 및 시스템과 관련된 기능을 제공
  • 유용한 클래스 필드와 메서드를 가짐
  • 모든 멤버는 static, 사용 시 객체를 생성할 필요 없음

Date 클래스


SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("G yyyy년 MM월 dd일 HH시 mm분 ss초");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 a hh시 mm분 ss초");


2. 컬렉션(Collection)

컬렉션

  • 자바에서 제공하는 자료구조를 담당하는 프레임워크
  • 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결되어 자료구조 알고리즘을 구현할 필요가 없음
  • java.util 패키지에 포함
  • 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용 가능
  • 배열의 문제점
    1) 한번 크기를 지정하면 변경할 수 없다.
    2) 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다.
    3) 한 타입의 데이터만 저장 가능하다.
  • 컬렉션의 장점
    1) 저장하는 크기의 제약이 없다.
    2) 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다.
    3) 여러 타입의 데이터 저장이 가능하다.(Wrap 기능 이용)
  • 컬렉션의 단점:
    각 요소마다 타입이 다르기 때문에 원하는 코드가 있을 경우 타입 검사와 다운 캐스팅이 강제됨
if(list.get(i) instanceof String) {
	char ch = ((String)list.get(i)).charAt(0);
	System.out.println("ch: " + ch);
}else if(list.get(i) instanceof Integer) {
	int max = ((Integer)list.get(i)).MAX_VALUE;
	System.out.println("max: " + max);
}else if(list.get(i) instanceof Double) {
	double min = ((Double)list.get(i)).MIN_VALUE;
	System.out.println("min: " + min);
}

자료구조

  • 데이터(자료)를 메모리에서 구조적으로 처리하는 방법론

컬렉션의 주요 인터페이스

  • 1) 리스트(list):
    자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체 저장 가능
    2) 집합(set):
    저장 순서가 유지되지 않고, 중복 객체도 저장하지 못하게 하는 자료구조
    3) 맵(map):
    키(key)와 값(value)으로 구성되어 있으며, 키와 값은 모두 객체
    키는 중복 저장을 허용하지 않고(set방식), 값은 중복 저장 가능(list방식)
  • 엔트리(entry):
    map에서 키+값의 묶음
  • 컬렉션(collection):
    list와 set의 추상화로 map은 코드가 달라서 같이 추상화하지 않았음

List계열 주요 메서드


  • ArrayList:
    List의 후손으로 초기 저장 용량은 10으로 자동 설정되며 따로 지정도 가능
    저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능
    동기화(Synchronized)를 제공하지 않음

  • Vector:
    List의 후손
    ArrayList와 동등하지만 동기화(Synchronized)를 제공한다는 점이 ArrayList와 차이점

  • LinkedList:
    List의 후손으로, 인접 참조를 링크해 체인처럼 관리
    특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞/뒤 링크만 변경하면 되기 때문에
    객체 삭제와 삽입이 빈번하게 일어나는 곳에서는 ArrayList보다 성능이 좋음

Set계열 주요 메서드


  • HashSet:
    Set에 객체를 저장할 때 hash함수를 사용하여 처리 속도가 빠름
    동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않음
  • TreeSet:
    HashSet과 거의 동일하고 조금 느리지만 이진트리 구조를 이용해 자동 정렬해서 출력
  • LinkedHashSet:
    HashSet과 거의 동일하지만 Set에 추가되는 순서를 유지한다는 점이 다름

Map계열 주요 메서드


  • HashMap:
    키 객체는 hashCode()와 equals()를 재정의해 동등 객체가 될 조건을 정해야 함
    때문에 키 타입은 hashCode와 equals() 메서드가 재정의되어 있는 String타입을 주로 사용

Tree

  • TreeSet:
    이진 트리를 기반으로 한 Set컬렉션으로, 왼쪽과 오른쪽 자식 노드를 참조하기 위한 두 개의 변수로 구성
  • TreeMap:
    이진 트리를 기반으로 한 Map 컬렉션으로,
    키와 값이 저장된 Map.Entry를 저장하고 왼쪽과 오른쪽 자식 노드를 참조하기 위한 두 개의 변수로 구성


3. 제네릭(Generic)

제네릭

  • 클래스나 메서드 내부에서 다룰 데이터의 클래스 타입을 지정하거나
    컬렉션이 다룰 클래스 타입을 제한하여 한 종류의 클래스만 저장할 수 있게 한 기능
  • 제네릭을 사용하는 이유
    • 컴파일 단계에서 잘못된 타입을 사용할 수 있는 문제 제거
    • 컬렉션에 저장된 여러 종류의 객체를 꺼내서 사용할 때,
      객체의 종류에 따라 매번 형변환을 해야하기 때문에 코드가 복잡해짐(컬렉션의 단점)
    • 컬렉션, 람다식(함수적 인터페이스), 스트림, NIO에서 널리 사용
    • API Document 해석에 어려움을 겪어 학습에 제한
  • 제네릭의 장점
    • 컴파일 시 강한 타입 체크 가능(실행 시, 컴파일 시 에러 방지)
    • 타입 변환 제거 가능
List<String> list = new ArrayList<String>();
list.add("서울");
list.add("도쿄");
list.add("베이징");
for(int i=0; i<list.size(); i++) {
	String str = list.get(i); // 다운 캐스팅 필요 없음
    System.out.println(str.charAt(0));
}

0개의 댓글