WIL (항해 2주차 회고)

김형준·2022년 5월 22일
0

TIL&WIL

목록 보기
14/45
post-thumbnail

1. TIL 리스트업


2. 2주차 회고

이번 주 회고는 크게 Java 영역과 알고리즘(파이썬) 강의, Spring 프레임워크 영역으로 나뉠 것 같다.


1) Java 개념


ArrayList to Array

  • case: ArrayList에 담긴 int 값들을 그대로 Array에 담으려는 경우
  • ArrayList.stream().toArray();
  • 위의 경우 ArrayList는 참조자료형의 타입을 받고, 스트림을 사용하면 Stream 타입을 반환 받는다. 따라서 Stream<Integer>를 반환받아 toArray시 Object[]를 반환 받는다.
  • 따라서 원했던 int[]에 못넣어준다.
  • 이를 해결하기 위해, stream에서 형변환을 해주는 map을 떠올렸고, 검색하니 mapToInt라는 친절한 메서드가 존재했다.
  • ArrayList.stream().mapToInt(integer -> int).toArray();
  • 그렇게 완성한 코드.

OOP 구현 과제


HashMap

  • Java의 Map은 Python의 Dictionary와 같이 Key, Value로 이루어진 pair값을 저장하며 한 세트를 Entry라고 한다.

Static


제네릭스, 컬렉션 프레임워크

  • 아직은 익숙하지 않지만, 필수적으로 공부해야할 개념들이다.
  • 자바 개념 서적을 읽고 또 읽어보며 정리해야한다!!

다형성

  • 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.
  • 상속 관계의 타입인 경우에 해당한다.
  • 상세 내용 정리

2) 알고리즘 강의 (Python)


Array와 LinkedList 비교

  • 가장 핵심은 어떤 것을 사용할지는 상황에 따라 달라진다는 점이다.
  • 데이터에 접근하는 경우가 빈번하다면 Array / 삽입과 삭제가 빈번하다면 LinkeList를 사용한다.
  • 이는 배열과 링크드리스트의 장/단점에 기인한다.
  • 장/단점이 궁금하다면??! 🔗상세내용 보러가기
  • 파이썬으로 LinkeList를 구현해보며 장단점을 더욱 확실하게 알 수 있었다.
  • 🔗 파이썬으로 구현한 LinkeList 코드!

이진 탐색(binary search) 구현

  • 이진 탐색은 배열에서 특정 값을 찾을 때, 가운데 인덱스를 기준으로 범위를 좁혀가며 값을 찾는 방식이다.
  • 순차 탐색의 시간복잡도가 O(N)인 것에 비해, 이진 탐색의 시간복잡도는 O(logN)의 복잡도를 지닌다. (효율적이다!)
  • 계속해서 범위를 반토막 내기에 정확히는 O(log2N)의 시간복잡도를 지닌다.
  • 🔗구현 코드

재귀함수

  • 재귀함수는 함수 내부에 자기 자신을 호출하는 함수를 뜻한다.
  • 주의해야할 점은 자기 자신을 반복적으로 호출하기 때문에, 탈출 조건을 걸어줘야한다는 점이다.
  • 대표적 예시인 팩토리얼을 구현했다.

3) 스프링 부트 입문 개괄

  • 인텔리제이에 환경 설정 부터 시작하여, 타임라인 서비스까지 구현했다.
  • 4, 5주차 강의를 들이며 숙련하고 인프런 강의로 넘어가서 본격적으로 개념 공부를 시작할 예정이다.✌
  • 상세 내용 정리

3. OOP / JVM (키워드 정리)


1) OOP


2) JVM (Java Virtual Machine)

  • 정의: OS에 종속받지 않고 Java를 인식, 실행하기 위한 가상 기계(컴퓨터) 사진 참조.

  • JVM 구성요소

    • 클래스 로더: JVM 내로 클래스 파일(*.class)을 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈. 런타임 시 동적으로 클래스를 로드하고 jar 파일 내 저장된 클래스들을 JVM 위에 탑재한다. (.class 파일은 .java 파일이 자바 컴파일러(javac.exe)에 의해 Java bytecode로 변환된 파일이다. bytecode는 JVM이 이해할 수 있는 자바소스코드이다.)
    • 실행 엔진: .class 파일을 실행시키는 역할을 수행한다. 즉, 클래스 로더가 JVM 내 런타임 영역에 바이트 코드를 배치시키고, 실행엔진은 이를 실행하는 것.
    • 인터프리터: 실행 엔진은 자바 바이트코드를 명령어 단위로 읽어서 실행한다.
    • JIT(Just-In-Time): 인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경한다.
    • Garbage Collector: 더이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제한다.
    • Runtime Data Area: 프로그램을 수행하기 위해 OS에서 할당받은 메모리 공간
    • 위 그림에서 Method Area는 Static Area, Class Area라고도 불린다.
    • 런타임 데이터 영역에 대한 자세한 설명

3) JDK와 JRE란?

  • JDK: Java Development Kit, Java를 사용하기 위해 필요한 모든 기능을 갖춘 Java용 SDK(Software Development Kit). JDK는 JRE를 포함하며 컴파일러(javac), jdb, javadoc과 같은 도구도 포함한다.
  • JRE: Java Runtime Environment, JVM + 자바 클래스 라이브러리 등으로 구성되어 있다. 컴파일된 Java 프로그램을 실행하는 데 필요한 패키지!
profile
BackEnd Developer

0개의 댓글