[CS면접 및 자바 면접 준비] Generic 및 쓰레드 면접 질문 정리

2024. 3. 27. 01:40·면접 준비
728x90
반응형
SMALL

Generic


Java의 Generics 개념을 설명해주세요

➕

제네릭스를 사용하면 클래스, 인터페이스, 메서드를 정의할 때 타입(클래스 및 인터페이스)을 매개변수로 사용할 수 있다.
제네릭스의 주요 이점은 컴파일 시간에 오류를 감지할 수 있어 코드를 더 안전하고 명확하게 만들 수 있고.

메소드 인자, 반환 타입 및 또는 필드의 타입 간 종속성을 표현하기 위해 타입(클래스 및 인터페이스) 매개변수를 사용할 수 있다.

Generic을 사용해야 하는 이유는 무엇인가요?

➕
  • 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.
  • 실행 시 타입 에러가 나는것보다는 컴파일 시에 에러를 사전에 방지하는 것이 좋다.
  • 또 제네릭 코드를 사용하면 요소를 찾아올 때 타입변환을 할 필요가 없어 프로그램 성능이 향상된다.

Generic의 장점은 무엇이 있나요?

➕
  1. 타입 안정성 제공
  • 컴파일 타임에 타입 체크를 하기 때문에 런타임에서 ClassCastException과 같은 UncheckedException을 보장받음
  1. 타입체크와 형변환 생략 가능
  • 코드가 간결해짐

Generic의 특징은 무엇이 있나요?

➕

모든 객체에 대해 동일하게 동작해야하는 static멤버에 타입 변수 T를 사용할 수 없다.

  • T는 인스턴스변수로 간주되기 때문이다.
  • static 멤버는 인스턴스변수를 참조할 수 없다.

제네릭 타입의 배열을 생성하는 것도 허용되지 않는다.

  • 제네릭 배열 타입의 참조변수를 선언하는 것은 가능하지만, new T[10] 과 같이 배열을 생성하는 것은 안된다.이유는 new 연산자 때문이다. 이 연산자는 컴파일 시점에 타입 T가 무엇인지 명확히 알아야 하기 때문이다.
  • 꼭 제네릭 배열을 생성해야 할 필요가 있을 땐 new 연산자 대신 'Reflection API'의 new Instance()와 같이 동적으로 객체를 생성하는 메소드로 생성하거나, Object 배열을 생성해서 형변환 하는 방법 등 사용

Generic은 어떻게 사용해야 하나요?

➕
public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}

제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.

제네릭 타입은 클래스 또는 인터페이스 이름 뒤에 < > 부호가 붙고 사이에 타입 파라미터가 위치한다.

타입 파라미터는 정해진 규칙은 없지만 일반적으로 대문자 알파벳 한글자로 표현한다.

자주 사용하는 타입인자

https://blog.kakaocdn.net/dn/cXG8hv/btr1lAzCuvf/e8d3s8sDvEKQD2mJb0SKk0/img.png

Generic의 와일드 카드란 무엇인가요?

➕

코드에서 ?를 일반적으로 와일드카드라고 부른다. 사용하는 경우는 아래와 같다.

https://blog.kakaocdn.net/dn/pxGul/btr1lvrx5IJ/gzZp1XePaGI52d33pJJKHk/img.png

와일드카드 타입에는 총 세가지의 형태가 있으며 물음표(?) 키워드로 표현된다.

<?> : 타입 파라미터를 대치하는 것으로 모든 클래스나 인터페이스타입이 올 수 있다.

  • A ~ E 모두 가능

<? extends 상위타입> : 객체의 하위 클래스만 올 수 있다.

  • <? extends D> : D , E 가능

<? super 하위타입> : 객체의 상위 클래스만 올 수 있다.

  • <? super D> : D, A 가능

Generic 메서드란?

➕

제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다.

구현을 하기 위해선 리턴 타입 앞에 < >다이아몬드 기호를 추가하고, 타입 파라미터를 기술한 다음 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 된다.

public <타입 파라미터 . . . > 리턴타입 메소드명(매개변수, . . . ) { . . . }
public Box boxing(T t) { . . . }

제네릭 메소드는 두 가지 방식으로 호출할 수 있다.

  1. 리턴타입 변수 = <구체적 타입> 메소드명(매개값); //명시적으로 구체적 타입 지정
    Box box = boxing(100); //타입 파라미터를 명시적으로 Integer로 지정
  1. 리턴타입 변수 = 메소드명(매개값); //매개값을 보고 구체적 타입을 추정

Box box = boxing(100); //타입 파라미터를 Integer로 추정

일반적으로 매개값을 넣어줌으로 컴파일러가 유추하게 만들어주는 두번째 방법을 사용한다.

Thread


Thread란 무엇인가요?

➕ 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다. 또한 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 합니다.

쓰레드와 프로세스의 주요 차이점은 무엇인가요?

➕ 쓰레드는 프로세스의 하위 집합입니다. 프로세스에는 완벽히 독립적인 공간이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않습니다. 프로세스 최소 1개의 쓰레드를 가지고 있습니다.

쓰레드는 프로세싀 내에서 Stack만 따로 할당 받고, 그 이외의 메모리 영역을 공유하기 때문에 다른 쓰레드의 실행 결과를 즉시 확인할 수 있습니다. 쓰레드는 프로세스 내에서 존재하며 프로세스가 할당받은 자원을 이용하여 실행됩니다.

자바의 쓰레드란 무엇인가요?

➕ 일반 쓰레드와 거의 차이가 없으며, JVM이 운영체제의 역할을 합니다. 자바에는 프로세스가 존재하지 않고 쓰레드만 존재하며, 자바 쓰레드는 JVM에 의해 스케쥴링되는 실행 단위 코드 블록입니다.

멀티 쓰레드란 무엇인가요?

➕ 하나의 응용프로그램을 여러 개의 쓰레드로 구성하고, 각 쓰레드로 하여금 하나의 작업을 처리하도록 하는 것입니다. 웹 서버는 대표적인 멀티 쓰레드 응용 프로그램입니다.

멀티 쓰레드의 장점은 무엇인가요?

➕ 1. 시스템 자원 소모 감소 2. 시스템 처리량 증가 - 스레드 사이 작업량이 작아 Context Switching이 빠름 3. 간단한 통신 방법으로 인한 프로그램 응답 시간이 단축 - 스레드는 프로세스 내의 Stack영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적음

Context Switching이 무엇인가요?

➕ 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정입니다. 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정입니다.

쓰레드 동기화 방법의 종류는 무엇이 있나요?

➕ 1. Mutex 상호배제라고도 하며, Critical Section을 가진 쓰레드의 Running Time이 겹치지 않도록 각각 단독으로 실행하게 하는 기술입니다. Lock을 사용해 하나의 프로세스나 쓰레드를 단독으로 실행하게 합니다.
  1. Semaphore
    리소스 상태를 나타내는 간단한 카운터입니다. 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있습니다.
    이진 세마포어 : 0과 1의 값만 갖는 세마포어
    카운팅 세마포어 : 도메인 제한이 없는 세마포어(0,1 뿐만 아니라 2,3,4 등의 값들 또한 가질 수 있다)

멀티 쓰레드의 단점은 무엇인가요?

➕ 1. 주의 깊은 설계가 필요 2. 디버깅이 까다로움 3. 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다. 4. 멀티 쓰레드의 공우 자원 공유의 문제가 발생(동기화 문제)

Critical Section(임계영역)에 대해 설명해주세요

➕ 임계영역이란 프로세스간에 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한 번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역입니다.

임계 영역 문제를 해결하기 위해서는 아래 3가지 조건을 충족해야 합니다.

  1. 상호 배제 : 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없습니다.
  2. 진행 : 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정해주어야 합니다.
  3. 한정 대기 : 다른 프로세스의 기아를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 영여겡 들어갈 때 제한을 두어야 합니다.

멀티 쓰레드의 동시성과 병렬성은 무엇인가요?

➕ 동시성은 멀티 작업을 위해 싱글 코어에서 여러 개의 쓰레드가 번갈아 실행하는 것입니다.

병렬성은 멀티 작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것입니다.

멀티 쓰레드 환경에서 주의사항은 무엇이 있나요?

➕ 다수의 쓰레드가 공유 데이터에 동시에 접근하는 경우에 상호배제 또는 동기화 기법을 통해 동시성 문제 또는 교착 상태가 발생하지 않도록 주의해야 합니다.

데드락에 대해 설명해주세요

➕ 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하여 무한정 기다리는 상황을 말합니다.

데드락의 4가지 조건

  • 비선점(Nonpreemptive) : 다른 프로세스의 자원을 뺏을 수 없음
  • 순환 대기(Circular wait) : 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조
  • 점유 대기(Hold & Wait) : 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근을 요구
  • 상호 배제(Mutual Exclusion) : 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적일 경우

자바에서 Thread를 구현하기 위한 방법은 무엇이 있나요?

➕
  • Runnable인터페이스 구현
    • run 함수를 반드시 구현
    • Thread 생성자의 매개변수로 입력
  • Thread 클래스를 상속
    • Thread 클래스를 상속받아서 구현
    • 다중 상속이 안되므로 이외 클래스를 받을 수 없다.

자바 쓰레드의 wait(), notify()는 어떤 메서드인가요?

➕ Object클래스의 정의된 메서드입니다. 동기화 블록 내에서만 사용할 수 있습니다.

쓰레드가 wiat()을 호출하면, 그 때까지 자신의 객체에 걸어 놓았던 모든 lock을 풀고 waiting pool에서 기다리게 됩니다.
다른 쓰레드에 의해 notify()가 호출되면, 대기실에서 벗어나 다시 실행대기상태가 됩니다.
notify()는 대기실의 하나의 쓰레드만 깨우고, notify All은 모든 쓰레드를 깨웁니다.

synchronized에 대해 설명해주세요

➕ 쓰레드가 하나의 자원을 공유함에 따라 데이터 일관성 문제가 생기는데, synchronized처리를 해줌으로써 하나의 쓰레드만 접근할 수 있도록 합니다.

728x90
반응형
SMALL

'면접 준비' 카테고리의 다른 글

백엔드 자바 면접 빈출 질문 대비하기 - 리스트 업  (0) 2024.08.01
[CS면접 및 자바 면접 준비] DB 데이터 베이스 면접 정리 - DB의 기  (0) 2024.03.28
[CS면접 및 자바 면접 준비] Network  (2) 2024.03.26
[CS면접 및 자바 면접 준비] 컬렉션 프레임워크  (3) 2024.03.23
[CS면접 및 자바 면접 준비] Java 특징, 환경, 연산, 제어문 등  (0) 2024.03.22
'면접 준비' 카테고리의 다른 글
  • 백엔드 자바 면접 빈출 질문 대비하기 - 리스트 업
  • [CS면접 및 자바 면접 준비] DB 데이터 베이스 면접 정리 - DB의 기
  • [CS면접 및 자바 면접 준비] Network
  • [CS면접 및 자바 면접 준비] 컬렉션 프레임워크
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (315)
      • 면접 준비 (36)
        • OS (6)
        • Spring Security (0)
        • Java (2)
        • DB (9)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Springframework
      redis 채팅
      HTML
      JSP
      스프링프레임워크
      자바기초
      리눅스
      java
      자바 면접질문
      리눅스마스터2급
      redis
      리눅스마스터2급정리
      자바 반복문
      자바스크립트
      자바
      자바 알고리즘
      CSS
      springsecurity
      jsp기초
      JavaScript
      Spring Data Redis
      Til
      프로그래머스
      spring redis
      자바 면접
      Spring
      jsp request
      레디스
      백준
      JS
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [CS면접 및 자바 면접 준비] Generic 및 쓰레드 면접 질문 정리
    상단으로

    티스토리툴바