개발/Java

기술면접 대비 정리

김현중 (keemhing) 2024. 9. 25. 16:38

국비지원을 통해 JAVA기반 개발자 교육과정을 수료하고 포트폴리오를 만든 뒤 하나씩 이력서를 넣고 있다. 기술면접을 대비하여 공부한 내용들을 정리해볼까 한다. 면접 전에 한 번씩 훑어볼 수 있게끔 최대한 간단명료하게 정리했으니 이 글을 읽는 취준생분들께 조금이나마 도움이 되었으면 하는 마음이다.

 

JAVA

1. 객체지향 프로그래밍 언어이다.

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

3. 장점: JVM(자바가상머신) 위에서 동작하기에 운영체제로부터 독립적이다.

4. 단점: JVM 위에서 동작하기에 실행속도가 상대적으로 느리며 다중 상속이나 타입에 엄격하며, 제약이 많아 러닝커브가 높다.


JVM(Java Virtual Machine)

1. Stack 기반으로 동작하며 자바 코드를 os에 맞게 해석한다.

2. 가비지 콜렉터를 통해 자동적 메모리 관리가 가능하다.

    - GabageCollector: 프로그래머가 동적으로 할당한 메모리 영역 중 쓰이지 않는 영역을 자동으로 찾아내어 해제하는 기능


JAVA의 컴파일 과정

1. 개발자가 java 파일을 생성하고 코드를 작성한다.

2. 컴파일러의 javac 명령어를 통해 바이트코드(.class)를 생성한다.

3. Class Loader를 통해 JVM 메모리 내부로 로드한다.

4. 실행엔진을 통해 컴퓨터가 각 운영체제가 읽을 수 있는 기계어로 해석된다.


JAVA의 원시타입

1. 정수형: byte, shore, int, log / 1, 2, 4, 8 byte

2. 실수형 : float, double / 4, 8 byte

3. 문자형 : char / 2 byte

4. 논리형 : boolean / 1 byte


오버로딩(Overloading)

- 하나의 클래스에서 매개변수 타입이나 수량을 다르게 선언하여 같은 이름의 메서드를 여러 개 정의하는 것이다.


오버라이딩(Overriding)

- 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것이다.


객체지향 프로그래밍

1. 프로그램 구현에 필요한 객체를 파악하고 상태와 행위를 가진 객체를 생성하여 역할을 부여하고 객체들 간의 상호작용을 통해 프로그램을 제작하는 것이다.

2. 기능이 아닌 객체가 중심이며 누가 어떤 일을 할 것인가? 가 핵심이다.


캡슐화

- 클래스의 내부 변수와 메소드를 하나로 패키징 (접근제어자가 대표적 예시)

    ㅁ 접근제어자 

        1. public - 어떤 클래스에서도 접근 가능

        2. protected - 동일 패키지의 클래스 또는 상속받은 클래스 내에서만 접근 가능

        3. private - 동일 클래스에서만 접근 가능

        4. default - 접근제어자를 별도로 설정하지 않으면 동일 패키지 안에서 접근 가능


다형성

- 객체의 속성, 기능이 상황에 따라 여러 가지 형태를 가지는 성질 (오버로딩, 오버라이딩 대표예시)


불변객체

1. 객체 생성 이후 내부 상태가 변하지 않는 것

2. final 키워드를 사용하여 불변객체 생성

3. 자원 자체가 불변이기 때문에 항상 동일한 값을 변환하여 thread-safe 하며 병렬 프로그래밍에 유용하다

    - thread-safe : 멀티 쓰레드스레드 프로그래밍에서 어떤 공유 자원에 여러 스레드가 동시에 접근해도 프로그램 실행에 문제가 없는 상태

4. 가비지 컬렉션 성능을 높일 수 있음


추상 클래스와 추상 인터페이스

1. 클래스 : 클래스 내부에 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우

2. 인터페이스 : 모든 메소드가 추상 메서드로만 이루어져 있는 경우

3. 공통점 : new 연산자로 인스턴스 생성 불가하고 하위 클래스에서 확장/구현해야 한다.

4. 차이점 : 인터페이스는 구현하는 모든 클래스에 대해 특정 메서드가 반드시 존재해야 한다.

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

                  클래스는 다중상속 불가, 인터페이스는 다중구현 가능하다.


객체 지향 설계원칙 - SOLID

1. 단일책임 원칙 (Single Responsibility Principle): 하나의 클래스는 하나의 기능만 가진다. (결제 클래스는 결제만)

2. 개방-폐쇄 원칙 (Open-Close Principle): 수정에는 닫혀 있고, 확장에는 열려있다. (추상화와 다형성이 중요한 메커니즘)

3. 리스코프 치환 원칙 (Lisvkov Substitution Principle) : 자식 클래스는 부모 클래스의 타입을 대체할 수 있어야 한다. (다형성과 확장성 극대화)

4. 인터페이스 분리 원칙 (Interface Segregation Principle): 사용하지 않는 인터페이스는 구현하지 말아야 한다. (최소한의 기능만 제공하면서 하나의 역할에 집중)

5. 의존관계 역전 원칙 (Dependency Inversion Principle): 추상클래스, 인터페스와 같이 변하지 않을 가능성이 높은 클래스와 관계를 맺어야 한다. (DI 활용하는 것)


JAVA의 메모리 영역

1. Method 영역 : 전역변수와 static변수를 저장. 프로그램 시작부터 종료까지 메모리에 남아있다.

                               JVM 동작해서 클래스가 로딩될 때 생성

2. Stack 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간. 메서드 호출 시 메모리에 할당되고 종료 시 해제된다.

                            메서드가 호출될 때 생성

3. Heap 영역 : new 키워드로 생성되는 객체, 배열등이 저장되는 공간. 가비지 컬렉션에 의해 메모리 관리된다.

                           런타임시 할당


static

1. 키워드를 사용한 변수나 메서드는 클래스가 메모리에 할당될 때 자동으로 생성된다. 객체 생성 없이 바로 사용

2. GC 영역 밖에 존재하기에 프로그램 종료될 때까지 메모리에 값이 유지

3. 자주 변하지 않는 값이나 공통으로 사용되는 값 같은 자원에 대해 선언하여 효율을 높인다


Error와 Exception 차이

- Error : 프로그램 비정상 종료되며 컴파일 시점에 체크 불가

- Exception : Error보다 경미한 오류이며 try-catch 문을 이용해 비정상 종료에 대비할 수 있다.

 


HTTP (HyperText Transfer Protocol)

1. 데이터를 주고받기 위한 프로토콜이다.

2. 통신간의 연결 상태 처리나 상태 정보를 관리할 필요가 없어 서버 디자인 간단하다

3. 이전 통신의 정보를 모르기 때문에 매번 인증을 해줘야 한다. (쿠키나 세션을 사용하여 데이터 처리)

4. Method

  • GET - 데이터 조회
  • POST - 요청 데이터 처리 (데이터 등록)
  • PUT - 데이터 변경 (해당 데이터가 없으면 생성)
  • DELETE - 데이터 삭제
  • PATCH - 일부 데이터만 변경

HTML (Hyper Text Markup Language)

- 웹 페이지에서 다른 페이지로 이동할 수 있도록 하는 기능을 가진 문서를 만드는 언어이다.


CSS (Cascading Style Sheets)

- HTML 태그에 디자인을 입혀주는 스타일시트이다.


JSP (Java Server Page)

1. HTML 코드에 JAVA 코드를 사용하여 동적 웹페이지를 생성하는 웹 애플리케이션 도구(라이브러리)이다.

2. Java Servlet: 웹 페이지를 동적으로 생성하기 위해 사용되는 서버 프로그램. Java를 기반으로 생성된다.

3. JSP가 실행되면 자바 “Servlet”으로 변환되며, 웹 어플리케이션 서버에서 동작된다. 생성된 데이터들을 웹페이지와 클라이언트를 통해 응답한다.

  • Web: 인터넷 기반의 정보기술, World Wide Web의 줄임말
  • Web Application: 웹에서 실행되는 응용프로그램. 사용자는 필요한 데이터를 요청(Request)하고 서버는 사용자의 요청을 수행하며 응답(Response)한다.
  • Web Browser: 클라이언트가 요청을 하고 전달받은 페이지를 볼 수 있는 환경
  • Web Server: 정적 콘텐츠를 담당하며 클라이언트의 요청을 서버에 저장된 리소스를 클라이언트에게 전달한다.
  • Web Application Server (WAS): 서버단에서 필요한 기능을 수행하고 그 결과를 웹 서버에 전달한다.

MVC 패턴

1. 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.

2. Model, View, Controller 세 가지로 구분하기에 MVC 패턴이라고 칭한다.

    - Model: 데이터와 비즈니스 로직을 처리한다. 사용자가 편집하길 원하는 모든 데이터를 의미한다.

    - View: 사용자에게 보이는 UI 부분이다. 데이터를 시각적으로 표현하는 역할을 한다.

    - Controller: 사용자의 입력을 처리하고, 모델과 뷰를 연결하는 역할을 한다.

3. 장점: 코드의 재사용성과 유지보수가 용이하다.

4. 단점: 설계의 시간이 오래 걸릴 수 있다. 

 

Ex) 모델은 요리사이다. 식재료(데이터)를 가지고 요리(처리결과)를 만들어 낸다. 

       뷰는 접시이다. 요리사가 만든 요리를 담아 손님(사용자)에게 보여주는 역할을 한다.

       컨트롤러는 직원이다. 손님의 주문(사용자의 입력)을 받아 요리사에게 전달하고, 요리사가 만든 요리를 접시에 담아 손님에게 가져다주는 역할을 한다. 


싱글톤 패턴

1. 단 하나의 인스턴스를 사용해 사용하는 디자인 패턴이다.

2. 인스턴스가 1개만 존재해야 하는 걸 보장하고 싶을 때나 동일 인스턴스를 계속 생성하는 경우 사용한다

3. 메모리 낭비를 방지할 수 있다.

4. Spring Bean이 대표적인 예시다.

    - Spring Bean 은 기본적으로 싱글톤 스코프이며 스프링 컨테이너는 모든 빈을 싱글톤으로 관리


 

댓글수2