랩터
개발 상식 본문
1. 좋은 코드란 무엇인가
좋은 코드란 기준이 조금씩 다 다르고 정의가 다르지만
- 읽기 쉬운 코드
- 중복이 없는 코드
- 테스트가 용이한 코드
라고 생각 됩니다
2. 객체 지향 프로그래밍이란 무엇인가
객체 지향 프로그래밍은 현실 세계의 개념을 객체로 모델링하여 프로그램을 재구성하는 방식입니다.
주요 목적은 재사용성,유지보수성, 확장성을 높이는 데 있으며, 다음과 같은 네 가지 주요 특징을 가집니다.
- 캡슐화: 객체 내부의 데이터를 외부에서 직접 접근하지 못하도록 하고, 메서드를 통해 접근하게 함으로써 데이터 보호 및 인터페이스 명확화
- 상속: 공통된 속성과 동작을 부모 클래스에서 정의하고, 자식 클래스에서 확장하거나 재정의하여 코드 재사용성을 높임
- 다형성: 동일한 인터페이스로 여러 객체를 동일하게 다룰 수 있어 코드 유연성과 확장성 향상
- 추상화: 불필요한 내부 구현은 감추고 필요한 기능만 외부에 공개하여 복잡성을 줄이고 사용성을 높임
3. OOP의 장점에 대해 설명해보세요
- 재사용성 (Reusability)
- 공통 기능을 **상속(Inheritance)**이나 컴포지션을 통해 재사용 가능
- 중복 코드 감소, 유지보수 시간 절약
- 유지보수성 (Maintainability)
- 기능이 잘 분리되어 있어, 특정 객체만 수정해도 전체 시스템에 영향 최소화
- SRP(단일 책임 원칙)에 기반한 구조 설계 가능
- 확장성 (Extensibility)
- 다형성(Polymorphism)을 통해 기존 코드를 변경하지 않고 새로운 기능을 쉽게 추가
- 인터페이스 기반 설계로 변경에 유연하게 대응
- 캡슐화로 인한 안정성 (Encapsulation)
- 객체의 내부 상태 보호 → 잘못된 접근 차단
- 버그 발생 가능성 감소, 디버깅 용이
- 현실 세계 모델링의 직관성
- 실세계의 사물과 유사하게 객체를 정의하여 개발자 이해도 상승, 설계가 쉬워짐
4. 객체 지향 개발 원칙에 대해 설명해보시오.
SOLID 객체 지향 설계 원칙
- S - 단일 책임 원칙 (Single Responsibility Principle)
- 클래스는 단 하나의 책임만 가져야 하며, 변경 이유도 하나여야 함
- 예: 게시판 관리 클래스는 게시글 CRUD만 책임지고, 인증은 별도 클래스에서 처리
- O - 개방/폐쇄 원칙 (Open/Closed Principle)
- 소프트웨어 요소는 확장에는 열려 있고, 변경에는 닫혀 있어야 함
- 즉, 기존 코드를 수정하지 않고 기능을 확장할 수 있어야 함
- 예: 인터페이스 + 다형성을 활용해 새로운 타입 추가 시 기존 클래스 변경 없이 처리
- L - 리스코프 치환 원칙 (Liskov Substitution Principle)
- 자식 클래스는 언제나 부모 클래스 타입으로 대체 가능해야 함
- 기능에 부작용 없이 동작해야 하며, 상속 구조의 안정성을 보장함
- I - 인터페이스 분리 원칙 (Interface Segregation Principle)
- 하나의 일반적인 인터페이스보다는 여러 개의 구체적인 인터페이스가 낫다
- 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 함
- D - 의존 역전 원칙 (Dependency Inversion Principle)
- 상위 모듈은 하위 모듈에 의존하지 않고, 둘 다 추상화에 의존해야 한다
- 구현 클래스보다는 인터페이스나 추상 클래스에 의존해야 유연성 확보 가능
5. RESTful API란 무엇인지 아는대로 설명해보세요.
RESTful API는 REST 아키텍처 스타일을 따르는 웹 API를 의미하며,
자원을 URI(Uniform Resource Identifier)로 표현하고,
HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 해당 자원에 대한 행위를 정의하는 방식입니다.
핵심 구성 요소
- 자원 중심 (Resource-Oriented)
- URI는 ‘동사’가 아니라 ‘명사’ 형태로 표현
- 예: /users, /posts/{id}
- HTTP 메서드 사용
- GET: 조회, POST: 생성, PUT: 수정, DELETE: 삭제
- 클라이언트는 HTTP 메서드에 따라 의도를 명확히 전달
- 무상태성 (Stateless)
- 서버는 요청 간의 상태를 저장하지 않음 → 요청마다 인증 정보 포함 필요
- 표준화된 응답 구조
- 상태 코드 (200, 201, 400, 404, 500 등)를 통해 요청 결과 명확히 전달
- JSON 포맷 기반 응답이 일반적
6. MVC 패턴에 대해 아는대로 설명해보세요.
MVC 패턴은 소프트웨어 설계 패턴 중 하나로,
애플리케이션을 Model, View, Controller의 세 가지 구성요소로 분리하여
역할을 분담하고, 유지보수성과 확장성을 높이기 위한 구조입니다.
구성 요소 설명
- Model (모델)
- 데이터와 비즈니스 로직을 처리
- 예: DB와 직접 연결되어 데이터를 불러오고 가공하는 역할
- Spring에서는 DAO, Service 클래스, Entity 등이 이에 해당
- View (뷰)
- 사용자에게 보여지는 화면(UI)
- 예: HTML, Thymeleaf, JSP, React 등의 화면 구성 요소
- Controller (컨트롤러)
- 사용자의 요청을 받아 처리 흐름을 제어하고, 적절한 데이터를 View에 전달
- Spring MVC에서 @Controller, @RestController가 이 역할을 담당
작동 흐름 예시
- 사용자가 /users URL에 접근
- Controller가 요청을 받아 Service/Model에 처리 지시
- Model에서 DB 조회 후 결과 반환
- Controller가 View에 데이터 전달
- View는 결과를 렌더링하여 사용자에게 화면 출력
7. Git 과 GitHub의 차이점에 대해 설명해보세요.
Git은 로컬에서 코드의 버전을 관리하는 분산형 버전 관리 시스템이고, GitHub는 이 Git 저장소를 원격에서 호스팅하고 협업할 수 있도록 도와주는 플랫폼입니다.
Git을 사용하면 브랜치 생성, 커밋, 병합 같은 작업으로 코드 이력을 관리할 수 있고, GitHub에서는 Pull Request, 코드 리뷰, 이슈 관리 같은 기능을 통해 팀원들과 협업할 수 있습니다.
'공부 > 면접' 카테고리의 다른 글
http://www.google.com을 접속할 때 일어나는 일에 대해 OSI 7계층과 연관지어 설명해보세요. (0) | 2025.05.08 |
---|