[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 to
link
를 걸어 이전/이후 포스트들로 갈 수 있게 추가 하였다. - 커밋 후 독학사 공부하자…😭
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 주차 시작!