ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바(JAVA) 기술 면접
    Java 2022. 11. 16. 21:22

    자바

       - 객체 지향 프로그래밍 언어 : 데이터를 추상화해 객체를 만들어 그 객체간의 상호작용으로 프로그램을 만드는 언어

     

    객체 지향 프로그래밍 특징

       - 다형성 : 어떤 객체를 참조하는지에 따라 해석이 가능하고 다양하게 쓰임

       - 상속 : 객체 간의 부모 자식 관계를 정립해 기능을 주고 받음

       - 캡슐화 : 변수나 함수를 하나의 단위로 묶기가 가능 / 정보은닉(public, private, protect)

     

    자바의 메모리 영역

       - 메소드 영역 : 전역변수와 static 변수를 저장, 프로그램이 종료될 때까지 메모리에 남아있다.

       - 스택 영역 : 지역변수와 매개변수 저장, 새로운 데이터가 할당되면 이전 데이터는 지워진다.

       - 힙 영역 : new로 생성되는 객체가 저장, 가비지 컬렉션에 의해 메모리 관리

     

    JVM

       - 자바 바이트 코드(.class)를 OS에 맞게 해석해주는 역할로 가비지 컬렉션을 통해 자동적인 메모리 관리를 해준다.

     

    자바 컴파일 과정

       1. 자바 파일(.java)을 만들어 build를 한다. 

       2. javac 명령어를 통해 자바 바이트 코드를 생성하고 클래스  loader로 JVM 메모리 내로 로드한다.

     

    오버로딩

       - 같은 이름의 메소드를 다른 파라미터로 재정의

    오버라이딩

       - 상위 클래스에 있는 메서드를 하위 클래스에서 재정의

     

    인터페이스

       - 모든 메소드가 추상 메소드로 이루어짐

       - new 연산자로 인스턴스 생성 불가

       - 실질적인 구현은 하위 클래스에서 진행

       - 다중 상속 가능

     

    추상클래스

       - 클래스 내 추상 메소드가 하나 이상 포함되거나, abstract class로 선언

       - new 연산자로 인스턴스 생성 불가

       - 실질적인 구현은 하위 클래스에서 진행

       - 상속받는 클래스들의 공통적인 로직을 추상화, 기능확장을 위해 사용한다.

       - 다중상속 안됨

     

    싱글턴 패턴

       - 인스턴스 하나만 만들어 메모리를 낭비하지 않음

       - 호출이 여러번 있어도 실제로 최초 생성 객체 하나만 반환해줌 (데이터 공유가 쉽다.)

       - 이 객체가 다른 객체 간의 연관도가 높아지면 객체 지향 원칙에 위배된다.

     

    가비지 컬렉션

       - 동적으로 할당됐던 메모리 영역 중에서 필요 없어진 메모리 영역을 회수하여 메모리 관리를 한다.

     

    클래스

       - 객체를 만들어내는 설계도

       - 객체를 사용한다. (상태 = fields / 행동 = method)

     

    생성자

       - 클래스와 동일한 이름의 메소드

       - 객체가 생성될 때 호출된다.

       - 메소드 오버로딩 가능

     

    Synchronized

       - 현재 데이터를 사용하는 쓰레드 이외는 접근은 막음

       - 변수와 메소드에 사용해서 동기화할 수 있다.

     

    String 선언

       - new String() : Heap 메모리 영역에 저장

       - ="" : String Constant pool에 저장

     

    String : 불변의 속성

    StringBuffer : 가변의 속성 / 동기화를 지원하여 멀티 쓰레드 환경에서 주로 사용

    StringBuilder : 동기화를 지원하지 않아 싱글 쓰레드 환경에서 주로 사용

     

    접근 제어자

       - public : 접근 제한 없음

       - protected : 같은 패키지 ( 상속받은 다른 패키지 가능 )

       - default  : 해당 패키지

       - private : 해당 클래스

     

    static

       - 클래스가 로딩이 되면 static을 사용한 변수나 메소드가 자동으로 생성되어 인스턴스 생성없이 바로 사용가능

       - 공통으로 사용하는 값을 지정하면 효율을 높일 수 있다.

     

    내부 클래스

       - 외부 클래스의 멤버에 쉽게 접근

       - 외부에서 내부로는 접근 안되어 코드의 복잡성을 줄인다.

     

    Reflection

       - 구체적인 클래스 타입을 몰라도 해당 클래스에 접근할 수 있도록 하는 자바 API

     

    Error

       - 치명적 오류, 컴파일 시점에서 확인이 불가능 / UncheckedException

    Exception

       - try-catch문으로 예방 가능 / CheckedException

     

    컬렉션 프레임워크

       - 데이터를 쉽게 관리할 수 있는 클래스의 집합

       - List, Set, Map이 존재한다.

     

    제네릭

       - 데이터 타입을 하나로 지정하지 않고 사용할 때마다 범용적이고 포괄적으로 지정

     

    직렬화 (Serialize)

       - JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술

     

    SerialVersionUID를 선언하는 이유

       - 직렬화할 때, 클래스 버전의 번호를 부여하는데 이것이 다르면 역직렬화를 못한다.

     

    Call By Value

       - 값에 의한 호출 (int, short, boolean)

    Call By Reference

       - 참조에 의한 호출 (array, class instance)

     

    Stream API

       - 데이터를 추상화하고 처리하는데 사용되는 함수들을 정의

       - 원본 데이터를 변경하지 않는다.

       - 일회용이다.

       - 내부 반복으로 작업을 처리한다.

     

    함수형 인터페이스

       - 함수를 객체처럼 다룰수 있게 해주는 어노테이션으로 @FunctionalInterface 라고 지정

       - 단 하나만 가질 수 있다.

     

    volatile

       - 자바 변수를 메인 메모리에 저장하겠다는 것을 명시한다.

     

    Iterator

       - Linkedlist 형태의 Iterator를 반환한다.

    iterable

       - iterator() 메소드를 하위 클래스에서 무조건 구현을 하게 만들어준다.

     

    Lambda

       - 함수를 하나의 식으로 표현한 것이다.

       - 익명 함수의 종류 (자바스크립트 화살표 함수 생각)

       - 불필요한 코드를 줄이고 가독성을 높임

    'Java' 카테고리의 다른 글

    자바 제곱근, 제곱 사용하기  (0) 2023.03.15
    JVM 구조 (자바 가상 머신)  (0) 2022.11.22
    자바 list  (0) 2022.10.24
    자바 반복문 for문 / while문 / 향상된 for문  (0) 2022.10.17
    자바 parameter / argument  (0) 2022.10.16
Designed by Tistory.