본문 바로가기

Study/면접준비

[1주차] 면접질문정리 (스터디)

2024.01.10  ( 스터디 완료 )

랜덤 질문 5개씩 답변하기 

 


 

 

Q) 프레임워크와 라이브러리 차이점?

 

더보기

 

프레임워크 : (특정 작업을 수행하기 위한) 전체적인 프로그램의 기본 구조를 정의하며, 개발자는 이 구조 안에서 정해진 규칙에 따라 코드를 작성.

 

라이브러리 : 특정 기능을 수행하는 코드의 모음으로, 개발자는 필요할 때마다 라이브러리의 함수나 모듈을 호출해서 사용.

 


 

Q) 스프링과 스프링부트 차이점?

 

더보기

 

Java 기반의 프레임워크

스프링부트는 스프링 프레임워크를 편리하게 사용할 수 있도록 (도와주는 도구)

간소화, 초기 설정을 제공 => 개발 생산성 향상.

 

1. 프로젝트 설정의 간소화 

 - 스프링 : 설정이 복잡하고 다양한 설정 파일이 필요. XML파일로 빈(Bean)을 설정하거나 Java Config를 사용.

 - 스프링부트 : 프로젝트 초기설정 간소화. 대부분의 설정은 자동으로 이루어짐.

 

* Java Config Spring 3.0 이후부터 사용. XML 파일 없이 자바 클래스를 활용하여 애플리케이션의 설정을 정의.

( ex) @Configuration / @Bean 어노테이션 )

 

2. 내장된 서버 및 기본 설정 제공

 - 스프링 : 서버 따로 설정 필요.

 - 스프링부트 : 내장 서버 제공. (톰캣)

 

3. 의존성관리

 - 스프링 : 라이브러리 버전 수동 관리  (* pom.xml 에서 java버전, spring버전 변경했었음)

   > Spring Legacy Project

 - 스프링부트 : 의존성 관리 자동화. Starter 패키지 제공 (라이브러리 제공)

   > Spring Starter Project 

 

* Maven, Gradle : Java 기반 프로젝트의 의존성 관리, 빌드, 테스트 및 배포를 위한 빌드 도구 및 프로젝트 관리 도구

* pom.xml : Maven 설정파일 (스프링)

* build.gradle : Gradle 설정 파일 (스프링부트)

스프링부트에서는 Maven, Gradle 두가지 모두 지원.

 

* 스프링 설치 & 초기 설정 참고

 

 

* 참고 * 

 

 

 


 

Q) MVC 모델이란?

 

더보기

 

M (Model) / V (View) / C (Controller)

소프트웨어 디자인 패턴 중 하나, 

어플리케이션을 세 가지 주요 부분으로 나누어 개발  => 코드의 구조 유지, 유지보수성 향상

 

1. Model (모델)

- 데이터와 비즈니스 로직 담당.

- 데이터를 가져와 처리하고, 데이터의 변경이나 상태변화를 감지하여 View에 알림.

- 사용자 인터페이스(UI)나 프리젠테이션과 직접적으로 상호작용하지 않음.

 

* 프리젠테이션 (Presentation) _ MVC 패턴에서는 뷰(View)

사용자에게 보여지는 부분, 즉 UI의 시각적인 측면 ( UI의 레이아웃, 디자인, 사용자 메시지 등 )

 

2. View (뷰)

- 사용자에게 정보를 시각적으로 표시하고 사용자의 입력을 받는 부분

- 모델로부터 데이터를 받아 사용자에게 표시하고, 사용자 입력을 컨트롤러에 전달.

- UI요소들을 포함한 사용자에게 보여지는 부분

 

3. Controller (컨트롤러)

- 사용자의 입력을 받아 Model과 View 사이의 상호작용을 조정.

- 모델을 업데이트하거나 모델로부터 정보를 가져옴.

- 사용자 요청에 따라 모델을 업데이트하고, 변경된 데이터를 뷰에 전달.

 

 

* 참고 * 

 

 


 

Q) 객체지향 프로그래밍이란?

 

더보기

 

* 객체지향  (Object-Oriented)

 객체지향이란 실세계의 사물을 추상화하여 멤버 변수와 메소드를 정의하는데서 출발한다. 캡슐화를 통해 이와 같은 멤버변수와 메소드의 이용가능 범위를 절정하게 제한할 수 있고, 상속을 이용하여 부모 클래스의 기능을 자식클래스에서 물려받거나 재정의를 통해 다른 기능을 구현하는 다형성까지 포함된다.

프로그램을 부품처럼 사용하기 위하여 만듬.

실 세계의 공통적인 것을 추상화하여 클래스를 설계하고 설계에 맞게 객체를 만들어서 사용.


 

* 객체지향 프로그래밍 ( OOP _ Object-Oriented Programming )

 객체지향 프로그램이란 기능과 데이터를 객체로 취급하여 프로그램에 반영한 것.

순차적 실행이 아닌, 객체와 객체의 상호작용을 통해 동작.

 


* 객체지향 특징

 

1. 클래스(Class)와 객체(Object)

 - 클래스 : 객체를 정의하는 틀 또는 설계도. 속성(멤버 변수)와 메서드(함수)로 구성.

 - 객체 : 클래스의 인스턴스로, 실제로 메모리에 할당되어 사용되는 것.

 

2. 다형성 (Polymorphism)

 같은 이름의 메서드나 연산자가 다양한 상황에서 다르게 작동하는 특성. (하나의 기능을 다양하게 사용)

ex) 상속, 오버로딩, 오버라이딩

 

3. 상속 (Inheritance)

 기존 클래스를 확장하여 새로운 클래스를 생성하는 개념.

공통적으로 필요한 성격을 가장 기본적인 클래스로 정의해두고, 상속받아 사용.

코드 재사용성을 높이고(중복 최소화), 계층 구조 형성.

 

4. 캡슐화 (Encapsulation)

 객체 내의 상태(변수)와 행위(메서드)를 하나로 묶는 것. (데이터와 기능들을 묶음)

public, protected, private 접근지정자를 통해 객체 외부에서는 내부 정보에 직접 접근하거나 조작할 수 없도록 막고,

getter와 setter를 통해서만 접근 가능.

 

5. 추상화

 객체들의 공통적인 특징을 뽑아냄. (복잡한 시스템을 단순화하고 필요한 부분에만 집중하여 표현)

예를들어, 클래스에서 중요한 특징을 강조하고, 불필요한 세부 사항을 숨김.

 

추상화(정보은닉)를 통해 클래스를 정의하고 해당 클래스 내부에 필요한 데이터화 메소드를 캡슐화(모듈화)하여 외부에 제공하는 인터페이스를 통해 추상화된 개념을 사용할 수 있음!


 

=>  코드의 가독성과 재사용을 높여 유지보수 용이 > 개발속도 향상

 

 


 

Q) 객체지향 언어인 Javascript가 Java와 다른점?

 

더보기

 

1. 타입 시스템

 - JavaScript : 동적 타입 언어, 스크립트 언어, 변수의 타입은 런타임에 결정되며, 명시적으로 선언할 필요X

 - Java : 정적 타입 언어, 컴파일 언어, 변수의 타입은 컴파일 시간에 결정되며, 명시적으로 선언 필요.

 

2. 상속 및 프로토타입

 - JavaScript : 프로토타입 기반의 상속을 지원. 

 - Java : 클래스 기반의 상속을 지원. 클래스를 사용하여 상속 계층을 정의하고 확장.

 

* 프로토타입 (Prototype)

모든 JavaScript 객체는 다른 객체로부터 상속받을 수 있는 프로토타입을 가지고 있음. 

프로토타입 체인을 통해 상위 객체로부터 속성과 메서드를 상속받을 수 있음.

 

3. 실행 환경

 - JavaScript : 주로 웹 브라우저에서 실행. Node.js를 사용하여 서버 측에서도 실행.

 - Java : JVM(Java Virtual Machine)에서 실행되어 여러 플랫폼에서 동작.

 

* Node.js 

 Chrome V8 JavaScript 엔진을 기반으로 한 JavaScript 런타임 환경으로, 서버 측 JavaScript 개발을 위해 만들어진 오픈 소스 플랫폼

 

4. 동시성 및 비동기 처리

 - JavaScript : 주로 웹 브라우저에서의 이벤트 처리 및 AJAX와 같은 비동기 작업에 활용.

 - Java : 멀티스레딩을 통해 동시성을 다루며, Java에서는 스레드를 사용하여 병렬 처리를 지원.

 


[ 면접질문 by 즨 ]

 

 

Q) 6개월 과정 만으로는 실무에 바로 투입되기에 많이 버거 울 수 있다. 이를 극복하기위해 어떻게 해나갈건가요?

 

더보기

 

현재 부족한 cs지식을 보강하기 위해 책과 강의를 활용하여 공부하고 있습니다.

끊임없는 자기계발을 필요로 하지만 그만큼 발전할 수 있다는 점이 제가 개발자의 길을 선택한 이유입니다. 

따라서, 실무에서도 보충이 필요한 부분이 있다면 개인시간을 할애하여 우선적으로 공부할 의향이 있습니다. 

 


 

 

Q) 추상클래스란 무엇인가?

 

더보기

 

추상클래스(Abstract)란 abstract을 이용한 미완성 메소드형태만 정의해두는 클래스.

추상클래스는 직접적으로 인스턴스를 생성할 수 없으며,  extends를 통해 상속한 하위 클래스에서 추상 메서드를 구현하여 사용. (상속받은 자식클래스에서 재정의 필요.)

 

* 추상메서드 (Abstract Method)

추상 클래스 내부에 존재하는 메서드로, 선언만 되어 있고 실제 기능은 하위 클래스에서 구현.

 

* 일반메서드 (Concrete Method)

추상 클래스는 일반 메서드도 가질 수 있으며, 추상 클래스 내부에서도 구현 가능.

 

 

* 인터페이스와 비교

 

더보기

 

인터페이스(Interface)란 추상 클래스보다 추상화 정도가 높은 상태를 정의할 때 사용. 기능의 재정의.

껍데기만 있는 클래스로 interface 를 이용해 정의하고, implements 를 통해 상속한  하위 클래스에서 추상 메서드를 구현하여 사용. (상속받은 자식클래스에서 재정의 필요.)

 

* 자바 8부터는 디폴트(default) 메서드와 정적(static) 메서드도 인터페이스에 추가 (재정의 없이 사용 가능)

 

* 차이점 

- 인터페이스는 메소드 선언만 가능, 클래스가 아니기 때문에 다중상속 가능.

- 추상클래스는 일반 메소드 선언 사용. 다중상속 불가능.

 


 

Q) 자바 컴파일 과정을 설명하시오.

 

더보기

 

java 소스코드 작성 => 컴파일(Compilation) => 바이트코드 생성 => JVM에서 실행

 

* 컴파일 : 사람이 볼 수 있는 코드인 소스코드를 컴퓨터 언어인 바이트 코드로 번역.

  * 소스코드 : 프로그래밍 언어로 작성된 파일 (.java)

  * 바이트코드 : 자바 소스 파일을 javac 명령어로 컴파일한 파일 ( .class)

 

  * javac  : Java 컴파일러(Command-Line Java Compiler)

 

      javac YourProgram.java

 

   예를 들어 명령어는 YourProgram.java라는 Java 소스 코드 파일을 컴파일하여

   바이트코드 파일인 YourProgram.class를 생성

   생성된 바이트코드 파일은 Java 가상 머신(JVM)에서 실행가능.

 


 

 

Q) 데이터베이스 언어에 대해 말해보세요.

 

더보기

 

데이터베이스에서 데이터를 정의, 조작, 제어하는 데 사용되는 특수한 언어.

 

1. DDL (Data Definition Language) 데이터 정의 언어

 - 데이터의 구조를 정의하기 위한 명령. 데이터베이스 객체를 생성, 수정, 삭제하는 데에 사용.

 - CREATE, ALTER, DROP

 

2. DML (Data Manipulation Language) 데이터 조작 언어

 - 데이터 조작을 위한 명령어. 데이터베이스에 저장된 데이터를 조회, 삽입, 갱신 삭제하는 데에 사용.

 - SELECT, INSERT, UPDATE, DELETE

 

3. DCL (Data Control Language) 데이터 제어 언어

- 데이터에 대한 엑세스를 제어하기 위한 명령어. 보안 및 권한 부여 관련 작업 수행.

 - COMMIT, ROLLBACK, GRANT, REVOKE

 

 * 가장 널리 사용되는 데이터베이스 언어 중 하나는 SQL (Structured Query Language)

 


 

 

Q) MyBatis를 이용할 때 쿼리의 종류에는 어떤 것이 있는지 말해보세요.

 

 

더보기

 

SELECT, INSERT, UPDATE, DELETE, 동적 SQL

 

 

1. SELECT 문

SELECT * FROM users WHERE id = #{id}

 

2. INSERT 문

INSERT INTO users (id, name, email) VALUES ( #{id}, #{name}, #{email} )

 

3. UPDATE 문

UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}

 

4. DELETE 문

DELETE FROM users WHERE id = #{id}

 

5. 동적 SQL

<if>, <choose>, <when>, <otherwise>, <foreach> 사용가능.

 

<select id="selectUserInfo" resultType="Map">
	SELECT * FROM users
    	<where>
        	<if test="name != null">AND name = #{name}</if>
        	<if test="email != null">AND email = #{email}</if>
        </where>
</select>

 

 

 

 

 


 

PYOJI STUDY (notion.site)

 

PYOJI STUDY | Built with Notion

표해현·최지은 CS지식 및 면접 대비 구술 스터디

elly-developer.notion.site