[Interview] 면접 준비 2일차(스터디)

Kim Hyen Su·2024년 5월 22일

면접질문

목록 보기
2/27
post-thumbnail

면접 준비

프로그래밍 공통


OOP에 대해서 설명해주세요

프로그래밍을 위한 패러다임 중 하나로, 명령어를 바이너리 코드로 변경 및 실행시켜주는 컴퓨터적인 사고에서 벗어나 인간의 사고에 좀 더 가까운 프로그래밍을 위해서 독립적인 하나의 객체를 만들고 객체 간의 상호작용을 통해 프로그램을 실행시켜주는 것을 말합니다.

객체지향 프로그래밍을 사용하는 이유로 크게 3가지가 있습니다.

  • 코드의 재사용성
  • 코드의 유지보수성
  • 코드의 중복제거
    background

OOP 방식으로 프로그래밍을 하기 위해서는 다음과 같은 특징을 가져야 합니다.

  1. 캡슐화
    필드와 메서드를 하나로 묶어 객체로 만든 뒤 내부 구현 내용을 외부에서 알 수 없도록 은닉해주는 것을 말합니다.
    필드와 메서드 간의 연관관계를 하나의 객체의 상태 또는 행위라는 이름으로 추상화가 가능합니다. - 재사용성이 올라갑니다.

  2. 상속
    상위 클래스에서 하위 클래스로 클래스 요소를 물려주는 것을 말합니다.
    상위 클래스에서 물려받은 필드 또는 메서드는 상위에서 한번만 수정하면 하위 클래스에서도 수정된 로직을 사용할 수 있으므로 코드의 일관성 유지가 쉽습니다.

  3. 다형성
    메서드의 반환 또는 인자값으로 상속/추상-구현 관계로 묶인 객체를 다양한 형태로 사용이 가능한 것을 말합니다. 이를 통해 코드의 유연성 및 유지 보수성을 높일 수 있습니다.

  4. 추상화
    객체의 공통된 필드 또는 메서드를 상위 개념으로 선언해주는 것을 말합니다.
    이를 통해, 재사용성 유지보수성, 중복 코드 제거라는 이점들이 있습니다.

절차지향과 객체지향 프로그래밍에 대해 설명하세요

절차지향 프로그래밍 방식은 클래스라는 개념이 없이 Main 메서드 내에 모든 변수와 비지니스 로직을 정의하는 방식을 말합니다.

해당 방식은 데이터 간의 무결성 보장이 어렵고, 규모가 커질수록 데이터가 분산되어 유지보수가 어려워집니다. 또한, 구성 요소들 간의 결합도가 매우 높아져 코드의 유연성이 떨어집니다.

객체지향 프로그래밍 방식은 객체마다 클레스로 정의하여 내부적으로 필드(데이터)와 메서드(비지니스 로직)을 분리하여 객체단위로 관리하므로 불필요한 결합도를 줄일 수 있습니다. 또한, 규모가 커지더라도 클래스 내부 데이터에 영향을 미치지 않도록 프로그래밍되므로 데이터 무결성 보장이 용이합니다.

동기 비동기 블로킹과 논블로킹을 엮어서 설명해주세요

동기와 비동기 그리고 블로킹과 논블로킹은 클라이언트-서버 또는 서버 간에 I/O 통신 시 사용되는 개념들입니다.

간단히 설명하면, 동기와 비동기는 작업을 순차적으로 수행하는지 아닌지, 블로킹과 논블로킹은 현재 작업을 수행할 때까지 block한 상태인지 아닌지에 따라 구분됩니다.

동기 - 블로킹 : 다른 함수를 호출했을 때, 해당 함수의 반환값이 필요하며, 다른 함수의 로직이 끝날때까지 자신의 로직을 수행하지 않는 것을 말합니다.

동기 - 논블로킹 : 함수 호출 시, 다른 함수의 로직이 끝날때까지 제어권을 기다리지 않고 자신의 코드를 계속 실행하지만, 해당.함수의 반환값이 필요하므로 주기적으로 실행 상태를 확인하는 것을 말합니다. ex) 폴링

비동기 - 블로킹 : 함수 호출 시, 다른 함수은 로직 수행이 끝나면 콜백함수를 반환합니다. 호출자는 다른 함수가 끝날 때까지 제어권을 기다립니다.

비동기 - 논블로킹 : 함수 호출 시, 다른 함수는 로직 수행이 끝나면 콜백함수를 반환합니다. 이와 관계 없이 호출자는 자신의 로직을 수행합니다.

Call By Value와 Call By Reference에 대해 설명하세요

두 개념은 메서드 호출 시 인자를 해당 메서드 내부로 전달하는 방법을 의미합니다.

call by value는 메서드에 인자를 전달 시, 인자로 전달할 값을 복사하여 메서드 내에서 사용하는 것을 말합니다. 이로 인해 메서드 내에서 변수의 값을 변경 하더라도 원래의 값은 변경되지 않습니다.

call by reference는 메서드에 변수를 전달 시, 객체의 참조값(메모리 주소)이 전달되는 것을 말합니다. 해당 참조값을 전달하여 참조하고 있는 메모리 내 값을 변경할 경우 실제 값이 변경됩니다.

자바에서는 오직 Call by value로만 동작하게 됩니다.

메서드를 호출하는 곳에서 인자로 들어가는 값과 메서드 내에서 사용된 변수는 Stack 영역에서 서로 다르게 존재하는 변수입니다.

프레임워크와 라이브러리의 차이점에 대해 설명하세요

프로그램 개발을 돕는 도구들입니다.하지만, 명확한 차이가 존재합니다.

라이브러리는 특정 기능을 수행하는 코드의 집합으로, 개발자의 필요에 따라 선택이 가능합니다. 프레임워크는 프로그램 개발의 틀을 제공하며, 개발을 위한 기본적인 필수요소를 포함합니다.

또한, 라이브러리는 개발자가 주도적으로 코드를 작성하고 그 과정을 보조하는 역할입니다. 반면에, 프레임워크는 프레임워크가 정한 규칙과 구조 내에서 개발이 진행됩니다.

결론적으로, 두 개념의 큰 차이점은 "누가 프로그램(애플리케이션)의 흐름을 제어하는가" 에 있습니다.

해당 개념에 대해서는 간단한 예시를 들어 설명할 수 있습니다.

profile
백엔드 서버 엔지니어

0개의 댓글