ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래밍 언어(Java) 정리
    취업 활동/면접 준비 2021. 1. 1. 15:49
    728x90

    Java 관련 지식

     

    - JVM

      추가 예정

     

    - 자바의 컴파일 과정

      자바 컴파일러가 소스코드를 바이트 코드로 변환합니다. 이후 JVM이 바이트 코드를 기계어로 변환하고, 이를 인터프리터 방식으로 실행합니다.

     

    - GC

      정리되지 않은 메모리와 같은 가비지를 정리해주는 프로그램입니다. 자바에서는 개발자가 명시적으로 메모리를 해제하지 않고, 가비지 컬렉터가 이를 수행합니다. 객체가 NULL 인 경우, 블록 안에서 객체가 생성되고 블록의 실행이 끝난 경우 GC의 대상이 됩니다.

     

      GC가 발생하게 되면 'Stop-the-world' 가 발생하게 되는데, 이때 GC 관련 스레드를 제외한 모든 스레드의 동작을 중단시킨다. 따라서, GC튜닝의 경우 이 stop-the-world 시간을 줄이는 것입니다.

     

      새롭게 생성된 객체는 금방 사용하지 않는 객체가 된다는 설에 기반하여서 young 영역, old 영역으로 나눕니다. young 영역은 다시 eden영역, 두 개의 survivor 영역으로 총 3개의 영역으로 나뉩니다. 새롭게 생성되는 객체는 eden 영역에 생성됩니다. 이후 eden 영역이 가득차게 된다면 minor GC을 통해 살아남은 객체들을 survivor영역 중 하나로 옮깁니다. 이를 다시 진행하다 survivor 영역이 가득차게 되면 살아남은 객체를 다른 survivor 영역으로 옮깁니다. 이를 반복하며 aging이 되고 정해진 threshold를 넘어서면, 이들을 old 영역으로 옮깁니다.

     

      old 영역에서 수행하는 major GC에는 여러 알고리즘이 있습니다. serial GC, parallel GC, CMS GC, G1 GC 등이 있습니다.

     

    - Collection

      Java의 Collection은 List, Map, Set 인터페이스를 기준으로 여러 구현체들이 존재합니다. 따라서 직접 자료구조를 구현하지 않고 구현체들을 사용할 수 있습니다.

     

    - List

      구현체로는 ArrayList, LinkedList, Vector가 있습니다.

     

      ArrayList는 내부적으로 배열을 사용하여, 데이터의 검색에 유리합니다. 그러나 추가, 삭제시에는 데이터를 복사하는 등의 오버헤드가 발생합니다. LinkedList는 데이터 추가, 삭제 시에 유리합니다. 그러나 데이터 검색 시에는 비효율적입니다. 이 두 자료구조 모두 동기화 기능이 제공되지 않습니다. Vector는 동기화된 메소드로 구성되어 있어, 스레드에 안전합니다. 다만, 속도는 ArrayList보다 느리게 동작합니다.

     

    - Map

      구현체로는 HashMap, LinkedHashMap, TreeMap 이 있습니다.

     

      HashMap은 Key를 기준으로 중복된 값을 허용하지 않으며, 순서를 보장하지 않습니다. LinkedHashMap은 입력되는 순서를 보장해주며, TreeMap은 정렬 기준을 가지고 순서를 보장해줍니다.

     

    - Set

      구현체로는 HashSet, LinkedHashSet, TreeSet 이 있습니다. value 값을 key 값처럼 함께 쓰이는 자료구조입니다.

     

      HashSet 중복된 값을 허용하지 않으며, 순서를 보장하지 않습니다. LinkedHashSet은 입력되는 순서를 보장해줍니다.

     

    - Stack, Queue

      Stack은 직접 new 키워드로 생성하고, Queue는 LinkedList에 new 키워드로 생성합니다.

     

    - Generic

      다양한 타입의 객체들을 다루는 메서드나 클래스에서 사용하는 것으로, 컴파일 과정에서 타입 체크를 해줍니다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안전성을 높이고 형 변환의 번거로움을 줄여줍니다.

     

    - final keyword

    - final class : 해당 클래스를 상속할 수 없습니다.

    - final method : 해당 메소드를 오버라이딩 할 수 없습니다.

    - final variable : 상수가 되어서, 새로 할당할 수 없는 변수가 됩니다.

     

    - Overriding & Overloading

    - Overriding : 상위 클래스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 재정의 하는 것을 의미합니다.

    - Overloading : 메소드의 리턴 타입, 이름은 같고 매개변수만 다르게 하여 여러 메소드를 정의하는 것입니다. 따라서 다양한 상황에서 메소드가 호출될 수 있도록 합니다.

     

    - Wrapper Class

      int, double과 같은 기본 자료형에 대한 클래스 표현을 Wrapper class라고 합니다. Integer 등이 Wrapper class의 예입니다. Wrapper class는 제네릭을 사용해야 하거나, null을 반환해야만 하는 경우에서 사용합니다. + 개인적으로 의미를 두어 사용한 경험 (Spring data JPA)

     

    - Multi-Thread 환경

     

    - field : 여러 스레드가 접근하는 싱글톤 객체라면 field에서 상태값을 가지고 있으면 안됩니다. 모든 변수를 파라메터로 넘겨받고 return 하는 방식으로 코드를 구성해야 합니다.

     

    - 동기화 : synchronized 키워드를 사용합니다.

    필드에 collection이 불가피하게 필요할 때는? Vector, HashTable과 같이 synchronized 키워드를 기반으로 구현된 클래스들이 존재합니다. 이들은 성능이 별로 좋지 않기 때문에 Collections 클래스에서 제공하는 synchronizedList, Map, Set 이라는 static 메소드를 주로 사용합니다. 또한 병렬처리를 지원하는 ConcurrentHashMap과 같은 구현체를 제공하기도 합니다.

     

    - ThreadLocal : 스레드의 지역변수를 설정하는 것입니다. 스레드 풀 환경에서 이를 사용하는 경우에는 보돤된 데이터를 다 사용한 후에는 반드시 remove를 통해 제거해줘야 합니다. 그렇지 않을 경우 재사용되는 스레드가 올바르지 않은 데이터를 참조할 수 있습니다.

     

    기타)

    - forEach (Iterable의 메소드로, Consumer 인터페이스를 구현한 클래스를 인자로 받음)

    - Method Reference : 특정 메소드만 호출하는 람다 표현식의 축약 표현입니다.

    - IntStream : primitive data 타입을 stream으로 다룰 수 있게 해줍니다.

    728x90

    '취업 활동 > 면접 준비' 카테고리의 다른 글

    웹(Web) 정리  (0) 2021.01.01
    네트워크(Computer Network) 정리  (0) 2021.01.01
    데이터베이스(Database) 정리  (0) 2021.01.01
    운영체제(Operating System) 정리  (0) 2021.01.01
    알고리즘(Algorithm) 정리  (0) 2021.01.01

    댓글

Designed by Tistory.