일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 티스토리챌린지
- KDT
- 디자인챌린지
- 백준
- 오픈패스
- 디자인강의
- Spring
- 백엔드
- Java
- 내일배움카드
- 국비지원
- 국비지원취업
- 부트캠프
- 내일배움캠프
- 국비지원교육
- 디자인교육
- 백엔드개발자
- 오블완
- OPENPATH
- 객체지향
- 백엔드 부트캠프
- baekjoon
- UXUI챌린지
- Be
- UXUIPrimary
- UXUI기초정복
- 오픈챌린지
- 환급챌린지
- 패스트캠퍼스
- mysql
- Today
- Total
군만두의 IT 공부 일지
신입 개발자 기술면접 예상 질문 정리 - 공통(1) 본문
1. IDE와 소스코드 편집기의 차이점은 무엇인가요?
소스코드 편집기는 코드를 작성하고 편집하는 기본적인 텍스트 도구입니다. 반면 IDE(통합 개발 환경)는 코드 작성뿐만 아니라 디버깅, 컴파일, 테스트, 배포 등 개발과 관련된 모든 과정을 지원하는 도구로, 자동 완성, 버전 관리, 디버거와 같은 다양한 기능을 제공합니다.
예를 들면, Visual Studio Code는 소스코드 편집기이지만, 플러그인 설치를 통해 IDE와 유사하게 사용할 수 있습니다. 반면, IntelliJ IDEA는 고급 기능을 제공하는 IDE입니다.
A1. 통합개발환경인 IDE가 더 포괄적인 개념이라고 할 수 있습니다. IDE가 소스코드 편집기를 포함합니다. IDE는 개발에 필요한 여러 가지 기능, 빌드를 자동으로 진행하거나 디버깅하는 기능, 결정적으로 소스코드를 편집할 수 있는 기능을 포함하고 있어 개발자의 사용 편의를 높입니다.
해설)
이 질문에서 면접관의 의도는 ‘평소에 학습하면서 어느 정도의 문제 의식을 가지고 학습하는가’를 파악하는 것입니다. 개발자로 취업하기 위해 면접을 보러 왔다면 어떤 종류가 되었든 IDE를 한번쯤은 사용해 보셨겠다. 그럼 당연히 IDE라는 용어를 들어 봤을 것이고, 문제 의식을 가지고 학습하는 사람이라면 IDE와 소스코드 편집기의 명칭을 구분해서 부르고 있다는 사실을 파악했을 겁니다. 사소해 보이지만, 평소에 학습하면서 마주치는 용어들의 정의와 유사한 용어와의 차이점을 찾아보고 정확히 알아두는 편이 좋습니다.
2. 객체지향에 대해 설명해 보세요.
객체지향 프로그래밍(OOP)은 현실 세계의 객체를 코드로 모델링하는 방식으로, 캡슐화, 상속, 다형성, 추상화와 같은 특징을 가집니다. 이를 통해 코드 재사용성을 높이고 유지보수를 용이하게 합니다. 객체지향은 클래스와 객체를 사용하여 데이터와 메서드를 함께 다루며, 현실 세계의 문제를 직관적으로 코드로 표현할 수 있는 장점이 있습니다. 예를 들어, 자동차를 나타내는 클래스는 바퀴, 엔진 등의 속성(필드)과 운전, 정지 등의 동작(메서드)을 가질 수 있습니다.
A3. 객체지향은 현재 가장 널리 사용되고 있는 프로그래밍 방법론입니다. 객체지향의 핵심은 추상화와 다형성이라고 생각합니다. 추상화와 다형성은 곧 인터페이스로 연결되는데요. 인터페이스 없이 애플리케이션을 개발하면 클라이언트 코드가 구체적인 클래스에 의존하게 되고, 하나의 클래스가 변경되면 다른 클래스도 계속해서 변경해 줘야 하는 문제가 생깁니다. 이런 문제를 해결하려면 클라이언트 코드가 구체적인 클래스가 아니라 인터페이스에 의존해야 합니다. 결국 클라이언트 코드와 구체적인 클래스 모두 인터페이스에 의존하게 되는 것입니다. 이처럼 코드를 변경했을 때 얻을 수 있는 몇 가지 이점이 있습니다. 첫째, 클라이언트 코드는 해당 인터페이스를 구현하고 있는 구체적인 클래스의 세부 구현을 몰라도 됩니다. 인터페이스에 의존하고 있기 때문에 구체적인 클래스가 바뀌더라도 인터페이스가 바뀌지 않는 한 클라이언트 코드로 변경 내용이 전파되지 않는다는 것입니다.둘째, 클라이언트 코드는 해당 인터페이스를 구현하고 있는 구체적인 클래스가 구현되지 않았더라도 자신의 코드를 개발할 수 있습니다. 테스트 코드를 만들어 해당 인터페이스가 해야 하는 역할에 대해 정의해 주기만 하면 됩니다.추상적인 존재는 보통 다형성도 가집니다. 인터페이스의 레퍼런스 변수는 해당 인터페이스를 구현하는 여러 클래스들의 인스턴스를 담을 수 있습니다. 그리고 레퍼런스 변수 안에 어떤 인스턴스가 들어 있는지 신경 쓰지 않고 메서드를 호출하면 안에 들어 있는 인스턴스의 종류에 따라 완전히 다른 동작이 실행될 수 있습니다. 만약 이런 성질 없이 인터페이스가 ‘필수로 구현해야 할 메서드의 집합’의 역할만 했다면, 인터페이스를 선언해도 추상화했을 때의 이점을 누릴 수 없게 될 것입니다.
해설)이 질문에 대한 답변에서 절대 붕어빵과 붕어빵 틀과 같은 예시를 들지 마세요. 그것은 객체지향에 대한 설명이 아니다. 이 질문을 한 면접관의 의도는 무엇일까요? 면접자가 단순히 로직만 구현하는 게 아니라 ‘더 나은 코드를 작성하기 위해 고민하고 공부하는 사람인가?’를 판단하는 질문이라고 생각합니다. 객체지향에 대한 이해와 고찰은 단순히 개발을 많이 한다고 해서 자연스레 늘어나는 것이 아니죠. 객체지향적인 코드를 작성하기 위한 학습과 노력의 결과라고 보는 것이 맞습니다. 마음 가는 대로, 아무렇게나 즉흥적으로 작성한 코드는 객체지향적이지 않은 코드일 가능성이 높습니다. 우선 객체지향적이지 않은 코드를 작성하는 것부터 시작해 익숙해지면 점차적으로 객체지향적인 코드 작성에 도전해보세요.
3. Override와 Overload의 차이를 설명해 보세요.
오버라이드(Override)는 상속받은 클래스에서 부모 클래스의 메서드를 재정의하는 것을 의미하며, 동일한 메서드 시그니처를 갖습니다. 이를 통해 부모 클래스의 기능을 자식 클래스에서 변경할 수 있습니다. 반면, 오버로드(Overload)는 같은 이름의 메서드를 매개변수의 타입이나 개수를 다르게 하여 여러 개 정의하는 것을 의미합니다. 예를 들어, Java에서 오버라이드는 부모의 동작을 변경하기 위해 사용되고, 오버로드는 유사한 기능을 다양한 방식으로 처리할 수 있도록 하는 데 사용됩니다.
오버라이드(Override)는 상위 클래스의 메서드를 재정의하는 것을 말합니다. 메서드의 이름은 물론, 파라미터의 개수나 타입을 동일한 환경에서 주로 상위 클래스의 동작을 상속받는 하위 클래스에서 변경하기 위해 사용합니다.
오버로드(Overload)는 메서드의 이름은 같고 파라미터의 개수나 타입이 다른 함수를 정의하는 것을 말합니다. 리턴 값만을 다르게 갖는 오버로는 작성할 수 없습니다.
오버라이딩은 상속받은 메서드의 내용만 변경하는 것이고, 오버로딩은 같은 이름의 메서드를 여러 개 가지며 매개변수의 유형과 개수가 달라도 재정의할 수 있습니다.
4. Call by reference란 무엇이고, 보통 어떻게 쓰이는지 설명해 보세요.
Call by reference는 함수 호출 시 변수의 메모리 주소를 전달하여, 함수 내부에서 변수의 값을 변경할 수 있는 방식을 말합니다. 이를 통해 함수가 직접 원본 데이터를 수정할 수 있게 됩니다. C++이나 Python에서 리스트 같은 자료형을 함수에 전달할 때 이 방식을 사용할 수 있습니다. Call by reference는 효율적인 메모리 사용과 데이터 수정이 필요한 경우 유용하게 사용됩니다. 예를 들어, Python에서 리스트를 함수에 전달하여 함수 내부에서 리스트의 값을 변경할 수 있습니다.
스프링은 자바에서 메서드 호출 시 "Call by value" 방식을 따릅니다. Call by value는 값에 의한 호출을 의미하며, 메서드에 변수를 전달할 때 해당 변수 값이 복사되어 사용됩니다. 따라서 사용자가 메서드 내에서 변수의 값을 변경하더라도 호출자의 변수는 변경되지 않습니다.
Call by reference (참조에 의한 호출)은 메소드에 변수를 전달할 때 변수의 참조(메모리 주소)가 전달되며, 메소드 내에서 변수를 수정하면 호출자의 변수도 변경됩니다. 스프링에서는 이러한 방식을 직접 사용하지 않고, 대신 객체를 전달하여 객체 내부의 상태를 변경할 수 있습니다. 이러한 경우 객체의 상태 변경과 관리가 더 효율적이며 예측 가능해집니다.
5. 클래스와 인스턴스의 차이에 대해 설명해 보세요.
클래스는 객체를 정의하기 위한 설계도 또는 청사진으로, 속성과 메서드를 포함하고 있습니다. 반면 인스턴스는 이 클래스를 통해 생성된 구체적인 객체를 의미합니다. 예를 들어, Car라는 클래스가 있다면, myCar라는 변수에 담긴 Car 객체는 인스턴스입니다. 클래스는 개념적인 틀이고, 인스턴스는 그 틀을 바탕으로 생성된 실제 데이터입니다.
클래스(Class)와 인스턴스(Instance)는 객체 지향 프로그래밍에서 중요한 개념입니다.
클래스(Class)는 객체의 속성(attribute)과 동작(behavior)을 정의하며, 객체를 생성하기 위한 템플릿 역할을 합니다.객체를 생성하기 위한 일종의 설계도로서 여러 객체가 공유하는 특성을 정의합니다. 예를 들어, ‘핸드폰’ 클래스는 핸드폰 객체가 가져야 할 속성(색상, 모양, 모델 등)과 동작(터치, 전원 등)을 정의할 수 있습니다.
인스턴스(Instance)는 클래스를 기반으로 생성된 객체를 말합니다.클래스가 설계도라면, 실제로 사용되는 데이터와 객체는 인스턴스 생성을 통해 만들어집니다. 클래스의 속성과 동작을 실제 값으로 가지고 있으며 각각 독립적으로 작동합니다. 예를 들어, ‘핸드폰’ 클래스에서 ‘삼성 갤럭시 S24’, ‘애플 아이폰 15’ 와 같은 여러 인스턴스를 생성할 수 있습니다.
클래스가 객체의 설계를 정의하고, 인스턴스는 클래스에 따라 생성된 실제 객체를 뜻합니다. 클래스에서 여러 인스턴스를 생성할 수 있고, 각 인스턴스는 클래스의 정의에 따라 각각 독립적인 데이터와 동작을 가지고 있습니다.
⭐참고자료
1) 한빛출판네트워크, "백엔드 기술 면접 TIP: 자바 기본 문법 예상 질문 5가지와 해설", 2024.02.08, https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS1626582373&cate_cd=
2) 제로베이스, "현직자가 말하는 신입 백엔드 개발 면접 질문 | 백엔드 스쿨", https://zero-base.co.kr/event/media_BE_school_qna
3) 스파르타코딩클럽, "2024 백엔드 면접 질문 문제은행 - 개발자 면접 준비 101", 2024.08.22, https://spartacodingclub.kr/blog/2024-backend-jobinterview-question
이 글은 참고자료를 바탕으로 각 질문에 대한 답변을 정리한 것으로, 틀린 부분이 있을 수도 있습니다.
'기타 > 기술면접' 카테고리의 다른 글
신입 개발자 기술면접 예상 질문 정리 - 운영체제(1) (1) | 2025.01.01 |
---|---|
신입 개발자 기술면접 예상 질문 정리 - 자료구조(1) (3) | 2024.11.12 |
신입 개발자 기술면접 예상 질문 정리 - 네트워크(1) (0) | 2024.11.10 |
신입 개발자 기술면접 예상 질문 정리 - 자바(2) (2) | 2024.11.08 |
신입 개발자 기술면접 예상 질문 정리 - 백엔드(2) (0) | 2024.11.07 |