본문 바로가기
면접준비

[기술 면접] 객체 지향 프로그래밍

by 킹명주 2022. 12. 16.

JAVA로 취직을 하기 위해서는 OOP의 개념과 JAVA라는 언어에 대해서 숙지해야한다. 그래서 OOP, JAVA 예상 질문을 뽑아보고 실제로 면접에서 들었던 질문을 정리하면서 복습해보자!!

 

👉 예상질문

OOP

1. 객체 지향 프로그래밍이란 무엇인가요?

더보기

프로그래밍에 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍입니다.

 

2. 객체 지향 프로그래밍을 사용하면서 느꼈던 장점과 단점은 무엇인가요?

더보기

장점으로는 첫번째는 코드 재사용이 용이합니다. 반복되는 작업을 객체로 만들거나 상속을 통해 코드의 재사용을 높일 수 있습니다. 두번째는 유지보수가 쉽습니다. 캡슐화를 통해 데이터 구조, 역할, 기능을 하나의 캡슐 형태로 만들기 때문에 추가, 수정, 오류 슈팅 작업에 용이합니다.

 

단점으로는 프로그래밍 난이도가 상승한다는 것입니다. 아무래도 객체가 처리하려는 것에 대한 정확한 이해가 필요하기 때문에 설계단계부터 많은 시간과 노력이 필요합니다.

 

3. 객체지향 5대원칙을 설명해주세요.

더보기

(1) SRP(Single Responsibility Principle, 단일 책임 원칙)

객체는 오직 하나의 책임을 가져야 합니다.

 

(2) OCP(Open-Closed Principle, 계방-폐쇠 원칙)

객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 합니다.

 

(3) LSP(Liskov Substitution Principle, 리스코프 치환 원칙)

자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있습니다. 즉, 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야 한다는 것입니다.

 

(4) ISP(Interface Segregation Principle, 인터페이스 분리 원칙)

클라이언트에서 사용하지 않는 메서드는 사용해선 안된다는(의존 관계를 맺어서는 안된다) 원칙입니다. (인터페이스의 SRP)

 

(5) DIP(Dependency Inversion Principle, 의존성 역전 원칙)

추상적인 것은 자신보다 구체적인 것에 의존하지 않고, 변화하기 쉬운 것에 의존해서는 안된다는 원칙입니다. 즉, 자신보다 변하기 쉬운 것(자주 변경되는 클래스에)에 의존하지 말라는 것이다. 

 

4. 객체지향 프로그래밍 키워드에 대해 설명해주세요.

더보기

첫번째로 캡슐화에 대해 설명드리겠습니다. 캡슐화는 데이터와 코드의 형태를 외부에서 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법입니다.

두번째로 상속입니다. 상위 클래스의 모든 것을 하위 클래스가 이어받는 것입니다.

세번째로 다형성입니다. 자바의 경우 오버로드와 오버라이딩이 다형성의 대표적인 예입니다.

마지막으로 추상화입니다. 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미합니다.

 

5. (실제질문) 객체지향 프로그래밍에서 가장 중요한 개념은 무엇이라고 생각하나요?

더보기

해당 질문은 3, 4번을 참고하여 대답하면 될 것 같습니다.

<내 답변>

코드의 의존성을 줄이고 코드 재사용성을 높혀 중복 코드를 제거하는 것이라고 생각합니다.

(캡슐화와 관련된 내용)

 

JAVA

1. JVM이란 무엇인가요?

더보기

자바 가상 머신의 약자를 따서 줄여 부르는 용어로 JVM의 역할은 자바 애플리케이션을 class loader를 통해 읽어 자바 API와 함께 실행하는 것입니다. (class loader: JVM내로 클래스를 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈)

 

2. (실제질문) Java 실행방식을 설명해주세요.

더보기

자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어 자바 바이트코드(.class)로 변환시킵니다. 그리고 class loader를 통해 class 파일들을 JVM으로 로딩합니다. 로딩된 class파일들은 Execution engine을 통해 해석되고 해석된 바이트코드는 Runtime Data Areas에 배치되어 실행됩니다.

 

3. 어노테이션에 대해서 설명해주세요.

더보기

인터페이스를 기반으로 한 문법으로 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있습니다.

 

4. 오버라이딩과 오버로딩은 무엇이고 어떤 차이가 있을까요?

더보기

오버로딩은 메서드 이름이 같고 파라미터의 갯수나 타입이 다른 함수를 정의하는 것입니다. 

오버라이딩은 상위 클래스의 메서드를 하위 클래스가 재정의 하는 것입니다.

 

즉, 오버로딩은 메서드 이름은 같지만 기존에 없던 새로운 메서드를 정의하는 것이고,

오버라이딩은 상속 받은 메서드의 이름, 파라미터를 따라가고 메서드 안의 내용만 변경하는 것입니다.

 

5. 클래스는 무엇이고 객체는 무엇인가요?

더보기

클래스는 객체를 정의하는 틀, 설계도 같은 의미로 사용됩니다. 그리고 객체는 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 의미합니다.

 

6. 정적(static)은 무엇인가요?

더보기

static 키워드를 사용하면 모든 객체에서 공유하여 사용할 수 있습니다. 이렇게 만들어진 변수나 메소드는 프로그램이 종료되기 전가지 사용할 수 있으며 가비지 컬렉션에 의해 수집되지 않습니다.

(GC: 힙 영억에서 사용하지 않는 객체들을 제거하는 작업, C의 free() 함수를 생각하면 편함)

 

7. (실제질문) 자바에서 null을 안전하게 다루는 방법에 대해 설명해주세요.

더보기

매서드의 인자를 받을 때 Objects.requireNonNull()을 사용해서 방어할 수 있습니다.

마지막으로 설계할 때 사전 조건과 사후 조건을 명확히 하여 null에 대비할 수 있도록 해야합니다.

 

8. (실제질문) 인터페이스와 추상클래스의 차이점에 대해 설명해주세요.

더보기

인터페이스는 구현 객체가 같은 동작은 한다는 것을 보장하기 위해 사용하며 다중 상속이 가능합니다. 또한 인터페이스를 구현하는 집합간에는 관계가 없을 수 있습니다.

 

추상클래스는 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용하며 단일 상속만 가능합니다. 또한 추상클래스를 상속하는 집합간에는 연관관계가 있습니다.

 

9. 제네릭에 대해서 설명해주세요.

더보기

제네릭은 자바의 타입 안정성을 맡고 있습니다. 컴파일 과정에서 타입체크를 해주는 기능으로 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줍니다.

 

10. 접근 제어자의 종류와 이에 대해 설명해주세요.

더보기

private, default, protected, public이 있습니다. private은 해당 클래스 내에서만 접근 가능하고, default는 해당 패키지, protected는 상속한 클래스, public은 전체 영역에서 접근 가능합니다.

 

'면접준비' 카테고리의 다른 글

[기술 면접] 스프링 / 보안  (0) 2022.12.23
[기술 면접] 데이터베이스  (0) 2022.12.22
[기술 면접] 자료구조  (0) 2022.12.21
[기술 면접] 운영체제  (0) 2022.12.20
[기술 면접] 네트워크  (0) 2022.12.19