[REVIEW]
객체 지향 프로그래밍을 하는 이유
클래스 사용 → 변수와 관련 메소드를 묶어서 처리
오버로딩 → 같은 이름인데 다른 기능 구현 (다형성 제공)
상속 → 다른 사람이 만든 것을 기능을 추가 + 접근지정자
오버라이딩 → 동적 바인딩을 이해하고 이를 이용해 코딩(업캐스팅, 다운캐스팅)
→ 오버로딩을 줄일 수 있어(하나의 함수로)
추상 클래스(오버라이딩하라고 만듦) + 인터페이스(오버라이딩하라고+스팩)
제네릭 → 어떤 데이터 타입이 오더라도 해결
컬렉션
: 요소라고 불리는 객체들의 저장소
→ 모든 타입의 객체를 객체들을 저장할 수 있으며 사이즈가 가변적이다.
객체 배열 → 자료형 지정, 고정된 크기
컬렉션 → 일반화 되어 있고 크기 자동 조절, 위치 자동 이동
⇒ 수정, 삭제의 비중 유무, 데이터의 범위 초과 여부에 따라 결정
: 클래스 타입에 관계없이 같이 묶어서 저장하는 저장소 ex 스택
← **제네릭 기법**으로 구현
컬렉션은 객체만 묶을 수 있다
(→ 기본 타입 사용 불가능해 wrapper 클래스로 정의)
시험) 제네릭, 타입 매개 변수, 제네릭과 관련해 래퍼 클래스를 만든 이유
자동 박싱/언박싱으로 기본 타입 값을 객체로 자동 변환
타입 매개변수, 값이 아니라 데이터 타입 전달
: 타입 매개 변수 <> 사이 하나의 대문자를 타입 매개 변수로 사용
일반적으로 많이 사용하는 것들 ex. E : element / T : type / V : value / Key : k
(모든 문자를 매개 변수 사용 가능, but 2 글자 이상 X)
타입 매개 변수가 나타내는 타입의 객체 생성 X (실제 타입으로 구체화해야)
(→ 특정 타입만 X, 여러 종류의 타입으로 전환 ⇒ 클래스나 메소드 일반화)
컬렉션 사용 시, 클래스 이름 전달
ex. 스택이라는 컬렉션(바구니)는 프로그램 코드의 변화 X, Stack<타입>
→ 프로그램을 짤 때 타입을 정해놓지 않았기
컬렉션 레퍼런스 타입이어야
객체를 부를 때 특정 타입으로 구체화 Stack<String>
시험) 제네릭 기법으로 코딩
Vector<Integer> = new Vector<Integer>();

타입 매개 변수 E → 정의할 때만 <>사용 ⇒ 모든 클래스 가능
boolean addAll() 업캐스팅 자동으로 Collection<? extends E> c
boolean remove(Object o)
o에서 업캐스팅이 일어나 작동 → 지우고 난 뒤 boolean 반환
capacity와 size 차이
Object[] toarray()
배열로 바꾸는 메소드
→ 리스트의 자리 이동 등으로 속도 저하를 개선하기 위해 배열로 바꿔 성능 향상
벡터를 다른 함수로 호출
→ 벡터를 매개 변수로 전달할 때 Vector<Integer> v에서 v만 쓰면 가능
( 콜링은 변수로, 콜드는 값으로 )
시험) 제네릭 개념을 어떻게 만드느냐
: 배열의 가장 큰 단점인 고정된 크기를 개선
→ 객체와 null만 삽입 가능 !
: 스레드 동기화 기능 X (=스레트 세이프 X, 데이터 훼손 가능성 O), 속도 빠르다
→ 멀티 스레드가 아닌 단일 스레드에서는 효과적
cf. 프로세스_프로세서 하나를 점유하여 사용, 프로세스의 일부분 = 스레드
동시성_ 여러 개의 프로세스를 하나의 프로세서에서 동작(시점 마다 다른 프로세스 실행)
병렬성_ 여러 개의 프로세스를 동시에 수행
스레드 동기화_ 2개의 스레드가 동시에 사용될 때 충돌 발생 가능 스레드 동기화로 해결
→ 동기화 코드 작성 후 실행해야 하므로 속도 저하
예제 7-3) Arraylist에 들어있는 모든 이름 출력_ C 스타일의 프로그래밍 방식
→ Iterator라는 인터페이스 생성
: Vector, ArrayList, LinkedList 등이 구현하는 인터페이스 → 순차 검색
(추상메서드로 구현되어 있는 스펙 → 클래스로 구현해야)
hasnext() - 다음 반복에서 사용될 요소 존재 여부 확인
next() - 다음 요소 반환
: 검색 기법으로 해싱을 사용하며 현존하는 가장 빠른 방법
→ 해싱 기법으로 key값을 주면 value값을 즉각적으로 전달
→ 타입 매개 변수 두 개를 사용 가능하다
→ hash를 쓸 때는 iterator랑 for문 사용하지 않고 검색 가능
→ Set은 대문자니까 동사 아니고 명사, 집합
예제 7-6) key의 iterator 사용_해시맵에서 컬렉션을 만들고 그 컬렉션으로 iterator 사용

: 이중 연결 리스트로 만들어짐, 맨 앞과 맨 뒤에 데이터 추가가 가능하다
→ 인덱스를 이용해 중간 삽입 가능
→ 스택이나 큐로 사용 가능
시험) LinkedList로 스택이나 큐를 구현해라
: 콜렉션을 리턴