ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기술 면접 - JAVA (고급)
    기술 면접 2021. 4. 23. 00:10

    16. 제네릭


    • 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능
    • 객체의 타입을 컴파일 타임에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어듬

    장점

    • 타입 안정성 제공
    • 타입 체크와 형변환을 생략 가능하므로 코드가 간결해진다

    generics

    17. Functional Interface


    • 하나의 추상 메소드를 가지고 있는 인터페이스
    public interface FunctionalInterface {
        public abstract void doSomething(String text);
    }
    • static 메서드나 default 메서드의 개수에는 제약이 없음

    사용 이유

    • java에서 함수를 일급객체처럼 다룰 수 있게 하기 위함
    • 람다식을 사용하게 만드는 배경

    18. 람다


    • 람다식의 도입으로 인해, 자바는 객체지향 언어인 동시에 함수형 언어가 되었음
    • 람다 표현식은 익명 클래스와 같다

    개념

    Lamda Expression이란 Functional Interface를 구현하는 객체를 만들지 않고도 메서드로 전달할 수 있는 익명 함수를 단순화한 것. 즉, 특정 메소드의 사용을 위해서 일회용 객체를 만들지 않아도 됨으로 성능면에서 좋다고 생각합니다.

    new Thread(()->{
    
        System.out.println("람다 표현식을 사용한 일회용 스레드 생성");
    
    }).start();

    19. 스트림


    Stream API란 자바에서의 일련의 데이터 요소인 배열이나 컬렉션 등의 데이터를 처리하기 위한 API 입니다. Stream API의 특징은 멀티 스레드를 활용해서 병렬로 연산을 수행할 수 있고, 내부 반복으로 연산을 수행하기 때문에 코드가 매우 간단해진다는 것을 알 수 있습니다.

    public static String streamTest() {
        String result = Stream.of("TONY", "a", "hULK", "B", "america", "X", "nebula", "Korea")
                .filter(w -> w.length() > 1)
                .map(String::toUpperCase)
                .map(w -> w.substring(0, 1))
                .collect(Collectors.joining(" "));
    
        return result;
    }

    20. 리플렉션


    개념

    자바에서 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading)하여 생성자(Constructor), 멤버 필드(Member Variables) 그리고 멤버 메서드(Member Method) 등을 사용할 수 있는 기법이다.
    클래스의 패키지 정보, 접근 지정자, 수퍼 클래스, 어노테이션(Annotation) 등을 얻을 수 있다.
    컴파일 시간(Compile Time)이 아니라 실행 시간(Run Time)에 동적으로 특정 클래스의 정보를 객체화를 통해 분석 및 추출해낼 수 있는 프로그래밍 기법이다.

    왜 사용할까?

    • 실행 시간에 다른 클래스를 동적으로 로딩하여 접근할 때
    • 클래스와 멤버 필드 그리고 메서드 등에 관한 정보를 얻어야할 때
    • 리플렉션 없이도 완성도 높은 코드를 구현할 수 있지만 사용한다면 조금 더 유연한 코드를 만들 수 있다.

    21. Volatile, Synchronized


    volatile

    멀티 코어 프로세서에서는 코어마다 별도의 캐시를 가지고 있음. 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업하게 됨. 다시 같은 값을 읽어올 때는 먼저 캐시에 있는지 확인하고 없을 때만 메모리에서 읽어온다

    volatile을 사용하게 되면 캐시를 들르지 않고 메모리에서 값을 읽어와서 캐시와 메모리간의 값의 불일치가 해결됨

    • 싱글턴 패턴에 스레드 세이프를 주기 위해 인스턴스에 volatile을 준다

    synchronized

    특정 영역을 임계 영역으로 지정하는 키워드, 임계 영역은 멀티 스레드 프로그램의 성능을 좌우하기 때문에 가능하면 메서드 전체에 락을 거는 것 보다는 synchronized 블럭으로 임계영역을 최소화하는 것이 좋음

    22. Thread Pool


    image

    • 스레드가 생성될 때 운영체제가 요청을 받아들여 메모리 공간을 확보해주고, 그 메모리를 스레드에게 할당한다
    • 스레드는 동일한 메모리 영역에서 생성되고 관리되지만, 생성 / 수거에 드는 비용을 무시 할 수 없음
    • 미리 스레드를 만들어 놓고 스레드들에게 작업을 할당한다

    장점

    • 프로그램 성능 저하 방지
    • 다수의 사용자 요청 처리

    단점

    • 너무 많이 만들어놓으면 메모리 낭비
    • 노는 스레드가 발생할 수도 있음

    23. JDBC


    JDBC(Java DataBase Connectivity)

    JDBC는 자바 프로그램이 DBMS에 일관된 방식으로 접근할 수 있도록 API를 제공하는 자바 클래스들의 모임이다. 즉 데이터베이스에 연결 및 작업을 하기 위한 JAVA의 표준 인터페이스이다.

    '기술 면접' 카테고리의 다른 글

    기술 면접 - 알고리즘  (0) 2021.04.24
    기술 면접 - 네트워크  (0) 2021.04.23
    기술 면접 - JAVA(Collection)  (0) 2021.04.23
    기술 면접 - JAVA (OOP)  (0) 2021.04.23
    기술 면접 - JAVA (기본)  (0) 2021.04.22

    댓글

Designed by Tistory.