[Routine] 6 주차 시작!
in Daily on Routine
![[Routine] 6 주차 시작!](/assets/img/daily/routine/2023/2023-02-26/2023-02-26-myroutine-6th.png)
“2023년 2월 20일 부터 2월 26일 까지의 나의 루틴.”
#목차
2023-02-20

- 오늘도 어김없이 영한 님의 인강을 들으면서 출근하였다.
- 출근하자마자 이제 1주일 남은 독학사 공부를 1시간 하였다.
- 현대사회와 윤리 과목인데 그나마 정의란 무엇인가와 소크라테스 익스프레스를 읽어서 생소한 이름은 그나마 줄어든듯 하다.
- 1시간 현대사회와 윤리 과목을 공부하고, 이것이 자바다 공부를 하였다.
컬렉션 자료구조(List)
- 자바는
자료구조(Data Structure)를 바탕으로 객체들을 효율적으로추가,삭제,검색할 수 있도록 관련된인터페이스와클래스들을java.util패키지에 포함시켜 놓았다. - 이들을 총칭해서
컬렉션 프레임워크(Collection Framework)라고 부른다.

“점선(- - -) : 구현 클래스, 실선(—-) : 상속 관계이다.”
- 인터페이스별 사용할 수 있는 컬렉션의 특징
| 인터페이스 분류 | 특징 | 구현 클래스 | |
|---|---|---|---|
| Collection | List | -순서를 유지하고 저장 -중복 저장 가능 | ArrayList, Vector, LinkedList |
| Set | -순서를 유지하지 않고 저장 -중복 저장 안됨 | HashSet, TreeSet | |
| Map | -키와 값으로 구성된 엔트리 저장 -키는 중복 저장 안됨 | HashSet, Hashtable, TreeMap, Properties | |
List Collection
List컬렉션은 객체를 인텍스로 관리하기 때문에 객체를 저장하면 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공.
| 기능 | 메서드 | 설명 |
|---|---|---|
| 객체 추가 | boolean add(E e) | 주어진 객체를 맨 끝에 추가 |
| void add(int index, E element | 주어진 인덱스에 객체를 추가 | |
| set(int index, E element) | 주어진 인덱스의 객체를 새로운 객체로 바꿈 | |
| 객체 검색 | boolean constains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
| E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
| isEmpty() | 컬렉션이 비어 있는지 조사 | |
| int size() | 저장되어 있는 전체 객체 수를 리턴 | |
| 객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
| E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
| boolean remove(Object o) | 주어진 객체를 삭제 |
Continue with List Collection Commit
ArrayList
ArrayList에 객체를 추가하면 내부 배열에 객체가 저장된다.- 일반 배열과의 차이점은
ArrayList는 제한 없이 객체를 추가할 수 있다는 것.

“
List컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 저장한다. 또한 동일한 객체를 중복 저장할 수 있는데, 이 경우에는 동일한 번지가 저장된다.null또한 저장이 가능하다.”
import java.util.List;
public class ArrayList {
public static void main(String[] args) {
List<E> list = new ArrayList<E>(); // E에 지정된 타입의 객체만 저장
List<E> list = new ArrayList<>(); // E에 지정된 타입의 객체만 저장
List list = new ArrayList(); // 모든 타입의 객체를 저장
}
}
ArrayList컬렉션에 객체를 추가하면 인덱스 0번부터 차례대로 저장된다.- 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨진다.
- 마찬가지로 특정 인덱스에 객체를 span style=”color:#ff8080”>삽입</span>하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 밀려난다.

“따라서 빈번한 객체 삭제와 삽입이 일어나는 곳에서는
ArrayList를 사용하는 것은 바람직하지 않다. 대신 이런 경우라면LinkedList를 사용하는 것이 좋다.”
Continue with ArrayList Commit
- 퇴근 후 역시 영한 님의 인강을 들으면서 퇴근 하였다.
- 퇴근하면서 들은 생각이 인강을 듣기만 하지 말고 코드로 옮겨서 정리해야겠다 라는 생각이 들었다.
- 집에 와서 밥을 먹고 운동한 후에 오전에 공부한 내용을 정리하였다.
markdown문법 중 테이블 컬럼또는 행을 병합하던 중 문제가 발생했는데 합쳐지지가 않는 것이었다.- 1시간의 사투 후 결국 아래와 같이 방법을 찾아냈는데 바로 jekyll-spaceship라는 플러그인을 설치하면 잘 되었다.
# file: "Gemfile"
# If you have any plugins, put them here!
group :jekyll_plugins do
gem 'jekyll-spaceship'
end
# file: "_config.yml"
plugins:
- jekyll-spaceship
# file: "_config.yml"
# Where things are
jekyll-spaceship:
# default enabled processors
processors:
- table-processor
- mathjax-processor
- plantuml-processor
- mermaid-processor
- polyfill-processor
- media-processor
- emoji-processor
- element-processor
mathjax-processor:
src:
- https://polyfill.io/v3/polyfill.min.js?features=es6
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
config:
tex:
inlineMath:
- ['$','$']
- ['\(','\)']
displayMath:
- ['$$','$$']
- ['\[','\]']
svg:
fontCache: 'global'
optimize: # optimization on building stage to check and add mathjax scripts
enabled: true # value `false` for adding to all pages
include: [] # include patterns for math expressions checking (regexp)
exclude: [] # exclude patterns for math expressions checking (regexp)
plantuml-processor:
mode: default # mode value 'pre-fetch' for fetching image at building stage
css:
class: plantuml
syntax:
code: 'plantuml!'
custom: ['@startuml', '@enduml']
src: http://www.plantuml.com/plantuml/svg/
mermaid-processor:
mode: default # mode value 'pre-fetch' for fetching image at building stage
css:
class: mermaid
syntax:
code: 'mermaid!'
custom: ['@startmermaid', '@endmermaid']
config:
theme: default
src: https://mermaid.ink/svg/
media-processor:
default:
id: 'media-{id}'
class: 'media'
width: '100%'
height: 350
frameborder: 0
style: 'max-width: 600px; outline: none;'
allow: 'encrypted-media; picture-in-picture'
emoji-processor:
css:
class: emoji
src: https://github.githubassets.com/images/icons/emoji/
- 얼른 커밋 하고 독학사 공부해야겠다…😭
2023-02-21
컬렉션 자료구조(Vector, LinkedList)
List Collection

- 오늘도 영한 님의 인강을 들으면서 출근을 했다.
- 어제 자기 전에
markdown테이블 병합한 걸 보고 싶어 빌드 된 나의 블로그를 확인해 보았는데, 결론적으론 나의local쪽에서만 가능한 것으로 확인되었다. - 해당 jekyll-spaceship만 봐도 결국
<table></table>태그를 사용하여 테이블 병합을 하고 커밋 하였다.. - 뭔가 좀 아쉽긴 하다….🤨
- 수정을 하고 바로 독학사 공부를 하였다. 그리고 8시 30분부터 이것이 자바다를 공부하였다.
- 어제 오전에 공부한
ArrayList를 커밋 후Vector를 공부하기 시작했다.
Vector
Vector는ArrayList와 동일한 내부 구조를 가지고 있다.- 차이점은
Vector는 동기화된(synchronized) 메서드로 구성되어 있기 때문에 멀티 스레드가 동시에Vector()메서드를 실행할 수 없다는 것이다. - 그렇기 때문에 멀티 스레드 환경에서 안전하게 객체를 추가 또는 삭제할 수 있다.

import java.util.List;
import java.util.Vector;
public class Vector {
public static void main(String[] args) {
List<E> list = new Vector<E>(); // E에 지정된 타입의 객체만 저장
List<E> list = new Vector<>(); // E에 지정된 타입의 객체만 저장
List list = new Vector(); // 모든 타입의 객체를 저장
}
}
Continue with Vector Commit
LinkedList
LinkedList는ArrayList와 사용 방법은 동일하지만 내부 구조는 완전히 다르다.ArrayList는 내부 배열에 객체를 저장하지만,LinkedList는 인접 객체를 체인처럼 연결해서 관리한다.

LinkedList는 특정 위치에서 객체를 삽입하거나 삭제하면 바로 앞뒤 링크만 변경하면 되므로 빈번한 객체 삭제와 삽입이 일어나느 곳에서는ArrayList보다 좋은 성능을 발휘한다.

import java.util.List;
import java.util.LinkedList;
public class LinkedList {
public static void main(String[] args) {
List<E> list = new LinkedList<E>(); // E에 지정된 타입의 객체만 저장
List<E> list = new LinkedList<>(); // E에 지정된 타입의 객체만 저장
List list = new LinkedList(); // 모든 타입의 객체를 저장
}
}
Continue with LinkedList Commit
2023-02-22

- 어제 회사에서 끝나고 차장님과 사원 한 분이랑 남아서 스타크래프트를 했다. 오랜만에 하니까 힘이 든다. 눈도 아프고…😂
- 오자마자 독학사 공부를 1시간 하였다. 망한 거 같다… 시험이 이번 주 일요일인데…😇
- 그리고 나머지 1시간은 어제저녁 늦게 집에 도착하는 바람에 정리하지 못한 List Collection, ArrayList, Vector, LinkedList를 정리하였다.
- 정리를 하고 나니 업무 시간이다…😂
- 퇴근하기전 영한 님의 로드맵을 보면 두 가지가 있다.
- 난 스프링 완전 정복을 먼저 듣기로 하였다.
- 왜냐하면 스프링 부트와 JPA를 보기 전에 스프링에 대해 좀 더 이해하고 넘어가고 싶었다.
- 그렇게 퇴근 후 독학사 시험이 얼마 남지 않아서 독학사 공부만 하였다.
2023-02-23 스터디 발표날

- 오늘도 어김없이 영한 님의 인강을 듣고 출근하였다.
- 인강이 좀 새롭게 느껴지는 게 스프링의 역사를 알려주셔서 개인적으로 역사를 좋아하는 한 사람으로서 더 재미있게 느껴지는 거 같다. 역시..👏
- 출근해서 어제 회사에서 front 단이
JSP로 되어있는 걸Vue로 마이너그레이션 작업 중인 프로젝트를 회사gitlab에 올리기 전에 테스트 후 커밋 하였다. - 파일이 생각보다 많아서 오래 걸릴 줄 알고 컴퓨터를 켜 놓고 커밋하고 퇴근했는데 생각보다 얼마 걸리지 않아서 괜히 걱정했구나 싶었다.😅
- 그리고 또 독학사 공부를 시작하였다…………..😭
스터디 발표
asd - 다형성
코드는 지우개로 지우게 - 인터페이스 구현
thisiswoo - OpenID
- 퇴근 역시 영한 님과 함께 한 후 집에 도착해서 운동 후 밥을 먹고 씻고 나와서 블로그 내용을 정리하였다.
OpenID주제로 발표를 하는데 잘못된 내용이 있어 ppt 자료를 수정하였다.- 수정 내용은 OAuth2.0을 OpenID 2.0으로 잘못 표기한 것이다.
- 또한 나의 루틴 포스트에
Continue with와Back tolink를 걸어 이전/이후 포스트들로 갈 수 있게 추가 하였다. - 커밋 후 독학사 공부하자…😭
2023-02-24

- 오늘도 어김없이 영한 님과 출근하는데 오늘은
SOLID를 배웠다. 약 1년 전 쯤 스프링을 공부하면서 배웠던 건데 내가 많이 잊고 있었다는 사실을 깨달았다. SRP: 단일 책임 원칙(Single Responsibility Principle) -> 한 클래스는 하나의 책임만 가져야 한다.OCP: 개방-폐쇄 원칙(Open/closed Principle) -> 소프트웨어 요서는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.LSP: 리스코프 치환 원칙(Liskov Substitution Principle) -> 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바뀔 수 있다.ISP: 인터페이스 분리 원칙(Interface Segregation Principle) -> 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.DIP: 의존관계 역전 원칙(Dependency Inversion Principle) -> 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다.- 다음에
SOLID에 대해 예제와 함께 포스팅 해야 겠다는 생각이 들었다. - 그리고 독학사를 공부하였다… 얼른 시험을 보고 싶다는 생각밖에 안든다…😭
- 퇴근 역시 영한 님과 함께 하는데
SOLID가 잘 이해가 안되는 부분이 이써서 몇번을 돌려 보았다. - 결국 코드를 직접 작성해 보는게 좋을 듯하다.
- 이번 주 일요일 까지는 독학사 공부를 위해 조금만 참자…😭
2023-02-25
- 독학사……. 얼른 끝났으면 좋겠다.. 내일이다….
2023-02-26
- 드디어 끝이 났다….🥳
- 이젠 내가 하고 싶은 공부 해야겠다!
- 일단 쉬면서 그동안 책 읽었던 것들을 정리해야겠다.
Reference
Back to [Routine] 5 주차 시작!
Continue with [Routine] 7 주차 시작!