내부 클래스 (Inner Class)
- 클래스 내에 선언된 클래스
- 특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다
- 코드의 복잡성을 줄일 수 있다(캡슐화)
내부 클래스의 종류와 특징
내부 클래스의 종류는 변수의 선언위치에 따른 종류와 동일하다
유효범위와 성질도 변수와 유사하므로 비교해보면 이해하기 쉽다
- 인스턴스 클래스(instance class)
- 외부 클래스의 멤버변수 선언 위치에 선언. 인스턴스 멤버처럼 다뤄진다
- 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다
- 스태틱 클래스(static class)
- 외부 클래스의 멤버변수 선언위치에 선언. static 멤버처럼 다뤄진다.
- 주로 외부 클래스의 static멤버, 특히 static 메서드에서 사용될 목적으로 선언된다.
- 지역 클래스(local class)
- 외부 클래스의 메서드나 초기화 블럭 안에 선언. 선언된 영역 내부에서만 사용될 수 있다.
- 익명 클래스(anonymous class)
- 상속관계의 부모클래스나 인터페이스, 추상클래스
- 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)
익명클래스*중요 = new**
- 이름 없는 클래스
- 한번만 사용하는 클래스
- 상속관계에 있는 부모(오버라이드)
- new 부모클래스{}[];
- new 인터페이스{}[]; //가장 많이 사용.
- new 추상클래스{}[];
프로그래밍 하는 일정한 방식
→ 디자인 패턴(공통, 표준화, 유지보수)*
- 싱글톤 패턴 (singleton pattern) → 객체(인스턴스)를 한번만 생성
- DAO(Datebase Access Object) → DB에 접근해서 일처리하는 객체.
- 생성자의 접근 제한자가 private
- 내부클래스를 이용
- static을 이용해서 외부에 접근
- new 객체(); = new 계속 객체 생성. → 싱글톤 = 한번만.
- MVC Model2 → 싱글톤(Dao) → 객체를 한번만 생성
컬렉션(Collection)
- 컬렉션 : 객체들의 저장소(가변 길이), 객체들의 컨테이너, 객체를 그룹화
- 프레임워크: 미리 (준비된) 표준화(정형화된) 클래스와 라이브러리의 모임(클래스, 인터페이스)
표준화, 정형화된 체계적인 프로그래밍 방식(클래스, 라이브러리)
- 컬렉션 프레임워크: 컬렉션(클래스,인터페이스)를 표준화 시켜서 다수의 데이터를 쉽게 처리할 수 있는 방법

List, Set, Map 각각 인터페이스의 특징.
- Java에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해서 제공하는 것을 JAVA Collection Framework(JCF)라고 하는데, 이 중 사용 용도에 따라 List, Set, Map 3가지로 정리할 수 있다.
- List : 순서가 있는 저장공간으로 중복을 허용하며, LinkedList, Stack, Vector, ArrayList로 구성되어있다. → 배열과 비슷
- Set : 순서가 없는 데이터의 집합이며 데이터의 중복을 허용하지 않는다. 대표적으로 HashSet이 있다. → 주머니
- Map : 키(key)와 값(value)으로 데이터를 저장하는 곳이며 순서는 유지되지 않는다. 키는 중복을 허용하지 않지만 값의 중복은 허용한다. 대표적으로 HashMap이 있다. → ajax
인터페이스 → 구현객체를 통해서만 실행
→공통적으로 세가지 모두 제네릭 타입이다.
제네릭 Generic (제네릭 타입)
-
데이터타입을 미리 정의하지 않고 클래스를 인스턴스하는 시점(new)에 데이터 타입을 지정해주는 방식
-
참조형(객체타입)만 타입으로 설정할 수 있다. → primitive type은 제네릭에 사용할 수 없다.
-
프로그래머가 원하는 개체타입을 명시, 의도하지 않은 객체가 저장되지 않도록 컴파일 시 오류를 확인할 수 있다.
-
클래스의 재사용성이 좋다
-
특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메서드를 일반화시키는 기법
-
컬렉션의 요소는 객체만 가능*
- int, char, double 등의 기본 타입으로 구체화 불가
-
참조형만 >>>>>> 제네릭 >>>>>> 컬렉션프레임워크 클래스, 인터페이스에 사용
-
기본형x >> Wrapper
-
제네릭 타입에 사용되는 파라미터
- 타입 매개변수는 하나의 대문자를 사용한다
- 타입 매개변수를 여러 개 사용할 수도 있지만 하나의 선언문에서 두 번 사용할 수는 없다.
벡터 Vector
컬렉션 프레임워크
- 표준 구조를 구현하는 클래스와 라이브러리의 모임이다
- 간단하게 프레임워크라고도 부른다
- 재사용할 수 있는 수많은 코드를 프레임워크로 통합함으로써 개발자가 새로운 애플리케이션을 위한 표준 코드를 다시 작성하지 않아도 된다
- Spring boot
- Collection FrameWork = Collection = Collection Class
컬렉션 클래스(Collection FrameWork)
-
다수의 데이터를 저장할 수 있는 클래스
-
List : 순서가 있는 데이터의 집합. 데이터의 중복을 허용
-
Set : 순서를 유지하지 않는 데이터의 집합. 데이터 중복을 허용하지 않음
-
Map : 키와 값의 쌍으로 이루어진 데이터의 집합. 키는 중복 허용하지 않음
- → JSON, Ajax, @RequestBody
- Key, Value → key를 이용해서 Value
-
Stream
- Iterator → 객체를 직렬화 → 컬렉션 객체를 출력할 때 사용
Iterator<Integer> iter=v1.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 직렬화 → 반복문 활용
정리가 잘 된 글이네요. 도움이 됐습니다.