4주차 회고
3주차 블로그 글을 작성하고 벌써 일주일이 지났다. 시간이 왜 이렇게 빨리가는지.. 학원에서 공부를 시작한지 벌써 한 달이다. 이번주는 3주간 공부한 내용을 복기하는 시간을 많이 가졌다. 미루고 미루던 CS 필기 정리도 다 완성했고, 자바의 정석도 완독을 위해 노력 중이다. 이번 주말에 남은 부분을 꼼꼼하게 봐야겠다. 저번 주에 당차게 시작한 미니 프로젝트는 오프라인 강의, 온라인 강의, 필기 정리 등에 밀려서 손을 대지 못하고 있다. 덩달아 깃허브 잔디 심기도 소홀해진 것 같다. CS 필기 정리가 어느정도 끝났으니까 다음주부터는 java위주로 다시 집중해야겠다.
- 이번 달에 한 일 -
1. CS_컴구, 운영체제, 네트워크, 시스템프로그래밍 온라인 강의 듣고 + 한 장 필기 정리
2. Java_온라인 강의 예습 완. 오프라인 강의 전부 출석. 6-7장 한 장 정리 완.
3. 미니 프로젝트 시작!
4. 스터디_Java코드에 익숙해지는 중
-다음 달에 할 일-
1. Java의 정석_1-2 정독하기(예제 정확히 이해하기)+11장 한 장 정리(1-5, 8, 9, 10, 12, 13장도!)+연습문제 오답 노트
2. CS_주 1챕 온라인 강의 듣기 + 한 장 정리(금욜에 정리! 절대 밀리지마.)
3. 미니 프로젝트 완성하기(<-과정 진행률 10% 때 마다 미니프로젝트 하나씩 만들어보기 목표!)
4. 깃허브 잔디심기_<스터디 코드+자바의 정석 예제>활용
5. 이펙티브 자바 책 완독
new > 5. 머신러닝 오프라인 강의 듣기 + 강의 들으면서 필기 정리 하기!(<- 시간이 없다)
▲과연 다음 달에 다 할 수 있을지...ㅎㅎ 최대한 해볼 수 있도록 파이팅!
-다음주 이것만은 꼭!-
○ Java 11장, 9장, 10장, 12장, 13장 한 장 정리 + 연습문제 오답노트
○ 오프라인 수업 놓치지 않기
스터디 시간에 조원들에게 배운 것들이 많다.
1) 클래스와 메인부분 등의 코드 위치는 회사 내규에 따름.
2) 메인부는 개발에 문외한인 PM이 봐도 이해할 수 있게끔.
-> 메인 부분에서 변수와 메서드들의 조합이 글로 읽혀지는 것처럼 작성. 어렵고 복잡하게 보이는 것은 클래스로 묶는다.
3) for문 마지막 조건식는 (++말고) +=3도 된다. String을 이어 붙이는 것은 (result+str말고) str+result도 된다는 것! <- 주로 쓰이는 코드에 익숙해져서 이것저것 해볼 생각을 못하는 것 주의..! 생각의 폭을 넓히자.
학습 내용



[Java-컬렉션 프레임 웍 & 핵심 인터페이스]
- 컬렉션 : 여러 객체(데이터)를 모아 놓은 것을 의미
- 프레임 웍: 포준화. 정형화된 체계적인 프로그래밍 방식 ⇒ 생산성↑, 유지보수^^
- 컬렉션 프레임 웍-컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스(컬렉션 클래)를 제공
- -java.util패키지에 포함. JDK1.2부터 제공
- -컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 방식
- 컬렉션 클래스: 다수의 데이터를 저장할 수 있는 클래스(ex. Vector, ArrayList, HashSet)
데이터의 종류 - List, Set, Map
Key-아이디, 값-비밀번호
List, Set -공통부분→collection클래스
⇒ 내가 내가 다룰 데이터는 순서와 중복이 있어, List클래스 인터페이스 컬렉션 프레임 웍 선택!
Collection클래스
AttayList
-기존의 Vetor를 개선한 것으로 구현원리와 기능적으로 동일.
-ArrayList: 동기화x / Vector: 동기화ㅇ
-List인터페이스를 구현⇒ 저장순서o 중복o
-데이터의 저장공간으로 배열을 사용(배열기만)
⇒ 1번 방식은 안에 숫자가 계속 이동하니까 속도 느림.
- 이동 2. null저장 3.리스트 - -
-배열의 장단점
^^) 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간(접근시간, access time)이 짧다
- -; 1)크기를 변경할 수 없다-크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야함 → 크기 변경을 피하려고 너무 큰 배열 생성하면 메모리 낭비됨
- -; 2)비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다 → 데이터를 추가하거나 삭제하기 위해, 다른 테이터를 옮겨야함. but 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠른다
배열의 단점 보완⇒LinkedList
LinkedList의 단점
데이터 접근성이 나쁨. 하나씩 연결되어 있기 때문에..
⇒더블리 링크드 리스트(doubly linked list): 이중 연결리스트. 접근성 향상
스택과 큐
스택(stack): LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다. 배열 유리
큐(Queue): FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다. 링크드리스트 유리
Queue는 인터페이스 → Queue q = new Queue(); (x)
→ Queue를 직접 구현 or Queue를 구현한 클래스를 사용.
Queue q = new LinkedList(); ←나중에 Queue구현한 다른 클래스를 넣어도 되니까 Queue 참조변수 사용
<스택과 큐의 활용>
스택의 활용 - 수식 계산, 수식 괄호 검사, 워드프로세서의 undo/redo, 웹브라우저의 두로/앞으로, 여는 괄호면 push 닫는 괄호면 pop해서 괄호가 잘 닫혔는지 확인
큐의 활용 - 최근사용문서, 인쇄작업 대기목록, 버퍼(buffer), 최근입력5개만 저장
Iterator, ListIterator, Enumeration
컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스(컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것)
Enumeration이 이전 꺼, Iterator는 최신 꺼(둘 다 비슷)
ListIterator는 Iterator의 접근성을 향상시킨 것(단방향→양방향)
컬렉션에 iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용.
Map에는 iertator()가 없다!(Map은 Collection의 자손 아님. (Collection의 자손: List,Set))
⇒ keySet(), entrySet(), values() 메서드를 이용해서, set이나 collection을 얻은 다음에 거기에 iterator를 호출(kyeSet()-Set, entrySet()-Set, values()-Collection)
Arrays - 배열을 다루기 편리한 메서드(static)제공
- 배열의 출력 - toStrign()
- 배열의 복사 - copyOf(), copyOfRange()
- ※배열 두 개를 복사(from, to): System. arraycopy(A, B);
※순차 검색-앞에서부터 차례차례 탐색. 앞에 있으면 빨리 찾고 뒤에 있으면 늦게 찾음
※이진 검색-배열 정렬 후 반을 잘라서 찾는 수가 큰지 작은지. 다음 반을 잘라서 수가 큰지 작은지. 또 반을 잘라서…. 탐색!
- 다차원 배열의 출력 - deepToString()
- 다차원 배열의 비교 - deepEquals()
- 배열을 List로 변환 - asList(Object…a)
- 람다와 스트림(14장) 관련 - parallelXXX(),spliterator(),stream()
※ 배열(char[])을 String으로 바꾸는 법
char[]—String(char[])—>String
String —tocharArray()—>String
Comparator, Comparable
객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스
Comparable 기본 정렬기준을 구현하는데 사용
Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용.
compare()와 compareTo()는 두 객체의 비교결과를 반환하도록 작성(같으면 0, 오른쪽이 크면 음수,작으면 양수)
※ 삼항연산자가 이진수 뺄 셈보다 빠르다!
HashSet - 순서X, 중복X
Set인터페이스를 구현한 대표적인 컬렉션 클래스
순서를 유지하려면, LinkedHashSet클래스를 사용하면 된다.
HashSet은 객체를 저장하기전에 기존에 같은 객체가 있는지 확인-같은 객체가 없으면 저장하고, 있으면 저장하지 않음
boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출-equals()와 hashCode()가 오버라이딩 되어 있어야함.
TreeSet
범위 검색과 정렬에 유리한 컬렉션 클래스
HashSet보다 데이터 추가, 삭제에 시간이 더 걸림
- 이진 트리는 모든 노드가 최대 2개의 하위 노드를 가짐
- 이진 탐색 트리. 부모 보다 작은 값은 왼쪽, 큰 값은 오른쪽에 저장
- → - -;) 데이터가 많아질 수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가)
※트리 순회: 이진 트리의 모든 노드를 한번씩 읽는 것.
- 전위 순회(preorder): 부모를 먼저 읽고, 자손을 나중에 읽는 것
- 후위 순회(postorder): 자손을 먼저 읽고, 부모를 나중에 읽는 것
- 중위 순회: 왼쪽 자손, 부모, 오른쪽 자손 순서 ⇒ 오름차순으로 정렬됨
- 레벨 순회: 위쪽 레벨부터 순서대로 읽는 것
HashMap과 Hashtable - 순서x, 중복(키x, 값o)
Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장.
HashMap(동기화x)은 Hashtable(동기화o)의 신버전.
※해시 함수로 해시테이블에 데이터를 저장, 검색/해시테이블은 배열과 리스트가 조합된 형태(배열의 장점: 접근성 + 링크드리스트의 장점: 변경 유리)
HashMap
Map인터페이스를 구현한 대표적인 컬렉션 클래스
순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다.
-해싱(Hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.
-Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장(아이디 비밀번호 활용)
Hashtable
범위 검색과 정렬에 유리한 컬렉션 클래스
HashMap보다 데이터 추가, 삭제에 시간이 더 걸림(비교해가면서 저장하기 때문)
Collections 클래스
-컬렉션을 위한 메서드(static)제공 ※objects 객체/Arrays 배열/Collections 컬렉션
- 컬렉션 채우기, 복사, 정렬, 검색 - fill(), copy(), sort(), binarySearch() 등
- 컬렉션의 동기화 - sychronizedXXX()
- 변경불가(readOnly) 컬렉션 만들기 - unmodifiableXXX()
- 싱글톤 컬렉션 만들기 - singletonXXX()
- 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
'개발 일지 > 주차별 학습일지' 카테고리의 다른 글
| [커널아카데미] 백엔드 12기 6주차 - SQL / 데이터 모델링 시작 (1) | 2025.05.02 |
|---|---|
| [커널아카데미] 백엔드 12기 5주차 - Java-지네릭스, 멀티스레드, 람다와 스트림, IO입출력 (1) | 2025.04.25 |
| [커널아카데미] 백엔드 12기 3주차 - Java-객체지향프로그래밍(관계) (0) | 2025.04.11 |
| [커널아카데미] 백엔드 12기 2주차 - Java-객체지향프로그래밍 (3) | 2025.04.04 |
| [커널아카데미] 백엔드 12기 1주차 - Git/Java-변수,연산자,조건문과 반복문 (0) | 2025.03.28 |