수업노트 - 내부클래스(Inner Class), 컬렉션(Collection)

sanchez9·2023년 7월 31일
1

JAVA 수업노트

목록 보기
13/16

내부 클래스 (Inner Class)

  • 클래스 내에 선언된 클래스
  • 특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다
  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다
  • 코드의 복잡성을 줄일 수 있다(캡슐화)

내부 클래스의 종류와 특징

내부 클래스의 종류는 변수의 선언위치에 따른 종류와 동일하다

유효범위와 성질도 변수와 유사하므로 비교해보면 이해하기 쉽다

  1. 인스턴스 클래스(instance class)
    1. 외부 클래스의 멤버변수 선언 위치에 선언. 인스턴스 멤버처럼 다뤄진다
    2. 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다
  2. 스태틱 클래스(static class)
    1. 외부 클래스의 멤버변수 선언위치에 선언. static 멤버처럼 다뤄진다.
    2. 주로 외부 클래스의 static멤버, 특히 static 메서드에서 사용될 목적으로 선언된다.
  3. 지역 클래스(local class)
    1. 외부 클래스의 메서드나 초기화 블럭 안에 선언. 선언된 영역 내부에서만 사용될 수 있다.
  4. 익명 클래스(anonymous class)
    1. 상속관계의 부모클래스나 인터페이스, 추상클래스
    2. 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)

익명클래스*중요 = new**

  1. 이름 없는 클래스
  2. 한번만 사용하는 클래스
  3. 상속관계에 있는 부모(오버라이드)
    1. new 부모클래스{}[];
    2. new 인터페이스{}[]; //가장 많이 사용.
    3. new 추상클래스{}[];

프로그래밍 하는 일정한 방식

→ 디자인 패턴(공통, 표준화, 유지보수)*

  • 싱글톤 패턴 (singleton pattern) → 객체(인스턴스)를 한번만 생성
    • DAO(Datebase Access Object) → DB에 접근해서 일처리하는 객체.
    • 생성자의 접근 제한자가 private
    • 내부클래스를 이용
    • static을 이용해서 외부에 접근
    • new 객체(); = new 계속 객체 생성. → 싱글톤 = 한번만.
  • MVC Model2 → 싱글톤(Dao) → 객체를 한번만 생성

컬렉션(Collection)

  • 컬렉션 : 객체들의 저장소(가변 길이), 객체들의 컨테이너, 객체를 그룹화
  • 프레임워크: 미리 (준비된) 표준화(정형화된) 클래스와 라이브러리의 모임(클래스, 인터페이스)
    표준화, 정형화된 체계적인 프로그래밍 방식(클래스, 라이브러리)
  • 컬렉션 프레임워크: 컬렉션(클래스,인터페이스)를 표준화 시켜서 다수의 데이터를 쉽게 처리할 수 있는 방법

컬렉션.jpg

List, Set, Map 각각 인터페이스의 특징.

  • Java에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해서 제공하는 것을 JAVA Collection Framework(JCF)라고 하는데, 이 중 사용 용도에 따라 List, Set, Map 3가지로 정리할 수 있다.
  1. List : 순서가 있는 저장공간으로 중복을 허용하며, LinkedList, Stack, Vector, ArrayList로 구성되어있다. → 배열과 비슷
  2. Set : 순서가 없는 데이터의 집합이며 데이터의 중복을 허용하지 않는다. 대표적으로 HashSet이 있다. → 주머니
  3. Map : 키(key)와 값(value)으로 데이터를 저장하는 곳이며 순서는 유지되지 않는다. 키는 중복을 허용하지 않지만 값의 중복은 허용한다. 대표적으로 HashMap이 있다. → ajax

인터페이스 → 구현객체를 통해서만 실행

→공통적으로 세가지 모두 제네릭 타입이다.

제네릭 Generic (제네릭 타입)

  • 데이터타입을 미리 정의하지 않고 클래스를 인스턴스하는 시점(new)에 데이터 타입을 지정해주는 방식

  • 참조형(객체타입)만 타입으로 설정할 수 있다. → primitive type은 제네릭에 사용할 수 없다.

  • 프로그래머가 원하는 개체타입을 명시, 의도하지 않은 객체가 저장되지 않도록 컴파일 시 오류를 확인할 수 있다.

  • 클래스의 재사용성이 좋다

  • 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메서드를 일반화시키는 기법

  • 컬렉션의 요소는 객체만 가능*

    • int, char, double 등의 기본 타입으로 구체화 불가
  • 참조형만 >>>>>> 제네릭 >>>>>> 컬렉션프레임워크 클래스, 인터페이스에 사용

  • 기본형x >> Wrapper

  • 제네릭 타입에 사용되는 파라미터

    • 타입 매개변수는 하나의 대문자를 사용한다
    • 타입 매개변수를 여러 개 사용할 수도 있지만 하나의 선언문에서 두 번 사용할 수는 없다.

벡터 Vector

  • ArrayList 과거형

  • List 인터페이스 구현객체

  • 배열을 가변 크기로 다룰 수 있게 하는 컨테이너

  • 요소의 개수가 넘치면 자동으로 길이 조절

  • 요소 객체들을 삽입 삭제 검색하는 컨테이너

  • Vector에 삽입 가능한 값

    • 객체, null
    • 기본 타입의 값은 Wrapper 객체로 만들어 저장
  • Vector에 객체 삽입

    • 벡터의 맨 뒤, 중간에 객체 삽입 가능
  • Vector에서 객체 삭제

    • 임의의 위치에 있는 객체 삭제 가능
  • 배열과 List의 차이

    • 길이 제한 유무 → List 길이의 제한이 없다
    • 요소의 타입 유무 → 요소는 객체이어야만 된다.
  • for each문으로 출력할 때.

    • 예시)

      List<Integer> list=new Vector<Integer>();
      
      //for(요소타입 변수:컬렉션객체){}
      for(Integer el : list){
      				//el -> 컬렉션 객체의 모든 요소를 모두 출력
      }

컬렉션 프레임워크

  • 표준 구조를 구현하는 클래스와 라이브러리의 모임이다
  • 간단하게 프레임워크라고도 부른다
  • 재사용할 수 있는 수많은 코드를 프레임워크로 통합함으로써 개발자가 새로운 애플리케이션을 위한 표준 코드를 다시 작성하지 않아도 된다
  • Spring boot
  • Collection FrameWork = Collection = Collection Class

컬렉션 클래스(Collection FrameWork)

  • 다수의 데이터를 저장할 수 있는 클래스

  • List : 순서가 있는 데이터의 집합. 데이터의 중복을 허용

    • DB데이터 출력
    • 배열(정해진 갯수)과 비슷
  • Set : 순서를 유지하지 않는 데이터의 집합. 데이터 중복을 허용하지 않음

    • 주머니
  • Map : 키와 값의 쌍으로 이루어진 데이터의 집합. 키는 중복 허용하지 않음

    • → JSON, Ajax, @RequestBody
    • Key, Value → key를 이용해서 Value
  • Stream


  • Iterator → 객체를 직렬화 → 컬렉션 객체를 출력할 때 사용
Iterator<Integer> iter=v1.Iterator(); // Iterator 객체 생성

while(iter.hasNext()){ // 요소가 있으면
				Integer el=iter.next(); // 요소(하나씩)를 요소타입변수에 담아서
				System.out.println(el+""); // 출력
}

  • First In, Last Out → FILO = Stack

  • LinkedList : 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 빠른 성능을 보장. 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
  • Stack : LIFO (Last in, First out) 형태를 취하는 구조로 마지막에 들어온 자료가 제일 먼저 추출됨.
    • push() → 추가 0인덱스 순서대로 추가 First in → 마지막 요소 다음에 추가.
    • pop() → 마지막 인덱스부터 제거 Last out
    • Static → FILO “처음에 들어온 게 가장 마지막에 나간다”
    • peek
  • Queue
  • Map<K, V> → JSON
    • put() → 추가
    • get() → 출력
    • .keySet() → 키값을 별도로 Set저장 → Map 직렬화 → 반복문 활용
profile
자바를 배우고 있어요

1개의 댓글

comment-user-thumbnail
2023년 7월 31일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기