[Routine] 6 주차 시작!

[Routine] 6 주차 시작!

2023년 2월 20일 부터 2월 26일 까지의 나의 루틴.

#목차

2023-02-20

2023-02-20

  • 오늘도 어김없이 영한 님의 인강을 들으면서 출근하였다.
  • 출근하자마자 이제 1주일 남은 독학사 공부를 1시간 하였다.
  • 현대사회와 윤리 과목인데 그나마 정의란 무엇인가소크라테스 익스프레스를 읽어서 생소한 이름은 그나마 줄어든듯 하다.
  • 1시간 현대사회와 윤리 과목을 공부하고, 이것이 자바다 공부를 하였다.

컬렉션 자료구조(List)

  • 자바는 자료구조(Data Structure)를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 관련된 인터페이스클래스들을 java.util 패키지에 포함시켜 놓았다.
  • 이들을 총칭해서 컬렉션 프레임워크(Collection Framework)라고 부른다.

collection

“점선(- - -) : 구현 클래스, 실선(—-) : 상속 관계이다.”

  • 인터페이스별 사용할 수 있는 컬렉션의 특징
인터페이스 분류특징구현 클래스
CollectionList-순서를 유지하고 저장
-중복 저장 가능
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제한 없이 객체를 추가할 수 있다는 것.

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

“따라서 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 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

2023-02-21

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

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
  • LinkedListArrayList와 사용 방법은 동일하지만 내부 구조는 완전히 다르다.
  • ArrayList는 내부 배열에 객체를 저장하지만, LinkedList는 인접 객체를 체인처럼 연결해서 관리한다.

LinkedList

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

LinkedList

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

2023-02-22

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

2023-02-23 스터디 발표날

2023-02-23

  • 오늘도 어김없이 영한 님의 인강을 듣고 출근하였다.
  • 인강이 좀 새롭게 느껴지는 게 스프링의 역사를 알려주셔서 개인적으로 역사를 좋아하는 한 사람으로서 더 재미있게 느껴지는 거 같다. 역시..👏
  • 출근해서 어제 회사에서 front 단이 JSP로 되어있는 걸 Vue로 마이너그레이션 작업 중인 프로젝트를 회사 gitlab에 올리기 전에 테스트 후 커밋 하였다.
  • 파일이 생각보다 많아서 오래 걸릴 줄 알고 컴퓨터를 켜 놓고 커밋하고 퇴근했는데 생각보다 얼마 걸리지 않아서 괜히 걱정했구나 싶었다.😅
  • 그리고 또 독학사 공부를 시작하였다…………..😭

스터디 발표

  1. asd - 다형성

  2. 코드는 지우개로 지우게 - 인터페이스 구현

  3. thisiswoo - OpenID


  • 퇴근 역시 영한 님과 함께 한 후 집에 도착해서 운동 후 밥을 먹고 씻고 나와서 블로그 내용을 정리하였다.
  • OpenID 주제로 발표를 하는데 잘못된 내용이 있어 ppt 자료를 수정하였다.
  • 수정 내용은 OAuth2.0을 OpenID 2.0으로 잘못 표기한 것이다.
  • 또한 나의 루틴 포스트에 Continue withBack to link를 걸어 이전/이후 포스트들로 갈 수 있게 추가 하였다.
  • 커밋 후 독학사 공부하자…😭

2023-02-24

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 주차 시작!