[자바] 신입 개발자 기술면접 질문 정리 -(1)

윤재열·2022년 8월 13일
0

CS지식

목록 보기
11/16

Java 의 특징을 설명해주세요

  • Java는 객체 지향 프로그래밍 언어입니다.

  • 기본자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화,상속,다형성이 잘 적용된 언어입니다.

  • 장점

    • JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적입니다.
    • GarbageCollector를 통한 자동적인 메모리 관리가 가능합니다.
    • 멀티 쓰레드를 지원합니다.
  • 단점

    • JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느립니다.
      • (그러나 바이트코드(컴파일된 Java 코드)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였다.)
    • 다중 상속이나 타입에 엄격하며,제약이 많습니다.

  • 정리 : Java는 기본자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향개념의 특징인 다형성,상속,캡슐화가 잘 적용된 객체 지향 프로그래밍 언어입니다.
    특징으로는 JVM(자바가상머신)위에서 동작하기 때문에 운영체제에 독립적이지면, 실행 속도가 상대적으로 느립니다.
    또한 GC를 통한 자동적인 메모리 관리가 가능하지만, 다중 상속이나 타입에 엄격하며 제약이 많습니다.

JVM의 역할에 대해 설명해해주세요.

  • JVM은 스택 기반으로 동작하며, Jave Byte Code를 OS에 맞게 해석 해주는 역할을 하고 가비지 컬렉션을 통해 자동적인 메모리 관리를 해줍니다.

  • Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.

  • 즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.

Java Compile 과정에 대해서 설명해주세요.

    1. 개발자가 *.java 파일을 생성한다.
    1. build를 한다.
    1. java compiler의 javac의 명령어를 통해 바이트코드(.class)를 생성한다.
    1. Class Loader를 통해 JVM 메모리 내로 로드한다.
    1. 실행엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석된다.(각 운영체제에 맞는 기계어)
  • 정리 : java 소스코드(.java)를 javaCompiler의 javac명령어를 이용하여 JVM이 인식할 수 있는 Java byte code(.class)로 변환되고 클래스 로더에 의해서 JVM 내로 로드 ->
    Interppreter방식으로 실행하다가Jit 컴파일러로 프로그램이 실제 실행하는 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경

Java에서 제공하는 원시 타입들에 무엇이 있고, 각각 몇 바이트를 차지 하나요?

  • 정수형 : byte-1,short-2,int-4, long-8

  • 실수형 : fload-4,double-8

  • 문자형 : char-2

  • 논리형 : boolean-1

  • 저는 외울때 bsil1248(브실1248)로 외웠습니다.ㅎㅎ

오버라이딩(Overriding)과 오버로딩(Overloading)에 대하여 설명해주세요.

  • 오버라이딩(Overriding)은 상위 클래스에 있는 메서드를 하위 클래스에서 재정의 하는 것을 말합니다.
    • ex)스프링에서 인터페이스로 서비스로직을 만들고 , serviceImpl로 구현체를 만드는 것을 떠올리면 됩니다.
  • 오버로딩(Overloading)은 매개 변수의 개수나 타입을 다르게 하여 같은 이름의 메서드를 여러 개 정의하는 것을 말합니다.
    • ex)필요한 만큼 생성자를 만들때를 떠올리면 됩니다.

객체지향 프로그래밍(OOP)에 대해 설명해주세요.

  • 기본자료형을 제외한 모든 데이터를 객체취급하며,처리요청을 받은 객체는 그 안의 기능을 사용해 요청을 처리합니다.
  • 특징으로는 캡슐화, 상속,다형성, 추상화 등이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다.

불변 객체가 무엇인지 설명하고 대표적인 Java의 예시를 설명해주세요.

  • 불변 객체는 객체 생성 이후 내부의 상태가 변하지 않는 객체를 뜻합니다.

  • Java에서는 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고,참조 타입일 경우에는 추가적인 작업이 필요합니다.

  • final 키워드
    - final class
    : 다른 클래스가 상속 받지 못한다.
    - final method
    : 자식 클래스에서 상위 클래스의 final method를 오버라이드 하지 못한다.
    - final variable
    : 변하지 않는 상수 값이 되어 새롭게 값을 할당할 수 없는 변수가 된다.

    참조 타입일 경우 추가적인 작업은 어떤게 있는지 설명해주세요.

  • 참조 타입은 대표적으로 1. 객체를 참조, 2. 배열, 3. List 등을 참조 할 수 있습니다.

  • 1.참조변수가 일반 객체인 경우 사용하는 필드의 참조 변수도 불변 객체로 변경해야 합니다.

  • 2.배열일 경우 배열을 받아 copy해서 저장하고,getter를 clone()으로 반환하도록 하면됩니다.

    • 배열을 그대로 참조하거나, 반환할 경우 외부에서 내부 값을 변경 할 수 있기 때문에 clone을 반환하여 외부에서 값을 변경하지 못하게 합니다.
  • 3.List인 경우에도 배열과 마찬가지로 생성시 새로운 List를 만들어 값을 복사하도록 해야합니다.

    public List<?> getExample() {
         return Collections.unmodifiableList(?);
     }

불변 객체나 final을 굳이 사용해야 하는 이유는?

  • Thread-safe하여 병렬프로그래밍에 유용하며, 동기화를 고려하지 않아도 됩니다.
    • 공유 자원이 불변이기 때문에 항상 동일한 값을 반환하기 때문에
  • 실패 원자적인 메서드를 만들 수 있습니다.
    • 어떠한 예외가 발생하더라도 메소드 호출 전의 상태를 유지할 수 있어 예외 발생 전과 똑같은 상태로 다음 로직처리가능
  • 부수효과를 피해 오류를 최소화 할 수 있다.
    • 변수의 값이 바뀌거나 객체의 필드 값을 설정하거나 예외나 오류가 발생하여 실행이 중단되는 현상
  • 메서드 호출시 파라미터 값이 변하지 않는다는 것을 보장
  • 가비지 컬렉션의 성능을 높일 수 있습니다.
    • 가비지 컬렉터가 스캔하는 객체의 수가 줄기 때문에 GC수행 시 지연시간도 줄어든다.

추상 클래스와 인터페이스를 설명해주고,차이에 대해 설명해주세요.

  • 추상 클래스는 클래스 내 추상메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다.
  • 인터페이스는 모든 메서드가 추상 메서드로만 이루어져 있는 것을 말합니다.
  • 공통점
    • new 연산자로 인스턴스 생성 불가능
    • 사용하기 위해서는 하위 클래스에서 extends/implement 해야 한다.
  • 차이점
    • 인터페이스는 그 인터페이스를 구현하는 모든 클래스에 대한 특정 메서드가 반드시 존재하도록 강제함에 있고,
    • 추상클래스는 상속받는 클래스들의 공통적인 로직을 추상화 시키고, 기능 확장을 위해 사용한다.
    • 추상클래스는 다중상속이 불가능하지만, 인터페이스는 다중상속이 가능하다

싱글톤 패턴에 대해 설명해주세요.

  • 싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴입니다.
  • 인스턴스가 1개만 존재해야 한다는 것을 보장하고 싶은 경우
  • 동일한 인스턴스를 자주 생성해야 하는 경우에 주로 사용합니다.
    • 메모리 낭비 방지를 위해서

싱글톤 패턴의 대표적인 예시를 간단하게 설명해주세요

  • 싱글톤 패턴의 대표적인 예시는 Spring Bean 입니다.
  • 스프링의 빈 등록 방식은 기본적으로 싱글톤 스코프이고, 스프링 컨테이너는 모든 빈들을 싱글 톤으로 관리합니다.
  • 스프링은 요청할 때마다 새로운 객체를 생성해서 반환하는 기능도 제공합니다.
    • 프로토타입 빈,@Scope("prototype")

가비지 컬렉션에 대해 설명해주세요.

  • 가비지 컬렉션은 JVM 메모리 관리 기법 중 하나로 시스템에서 동적으로 할당됐던 메모리 영영 중에서 필요없어진 메모리 영역을 회수하여 메모리를 관리해주는 기법입니다.

가비지 컬렉션 과정에 대하여 설명해주세요.

  • GC의 작업을 수행하기 위해 JVM이 어플리케이션의 실행을 잠시 멈추고,  GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업을 중단 후 (Stop The World 과정) 사용하지 않는 메모리를 제거(Mark and Sweep 과정)하고 작업이 재개됩니다.
    ++ GC의 작업은 Young 영역에 대한 Minor GC와 Old 영역에 대한 Major GC로 구분됩니다.

자바의 메모리 영역에 대해 설명해주세요

profile
블로그 이전합니다! https://jyyoun1022.tistory.com/

0개의 댓글