Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

랩터

개발 상식 본문

공부/면접

개발 상식

raptorhs 2025. 5. 8. 11:28

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 APIREST 아키텍처 스타일을 따르는 웹 API를 의미하며,
자원을 URI(Uniform Resource Identifier)로 표현하고,
HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 해당 자원에 대한 행위를 정의하는 방식입니다.

 

핵심 구성 요소

  1. 자원 중심 (Resource-Oriented)
    • URI는 ‘동사’가 아니라 ‘명사’ 형태로 표현
    • 예: /users, /posts/{id}
  2. HTTP 메서드 사용
    • GET: 조회, POST: 생성, PUT: 수정, DELETE: 삭제
    • 클라이언트는 HTTP 메서드에 따라 의도를 명확히 전달
  3. 무상태성 (Stateless)
    • 서버는 요청 간의 상태를 저장하지 않음 → 요청마다 인증 정보 포함 필요
  4. 표준화된 응답 구조
    • 상태 코드 (200, 201, 400, 404, 500 등)를 통해 요청 결과 명확히 전달
    • JSON 포맷 기반 응답이 일반적

 

6. MVC 패턴에 대해 아는대로 설명해보세요.

 

MVC 패턴은 소프트웨어 설계 패턴 중 하나로,
애플리케이션을 Model, View, Controller의 세 가지 구성요소로 분리하여
역할을 분담하고, 유지보수성과 확장성을 높이기 위한 구조입니다.

 

구성 요소 설명

  1. Model (모델)
    • 데이터와 비즈니스 로직을 처리
    • 예: DB와 직접 연결되어 데이터를 불러오고 가공하는 역할
    • Spring에서는 DAO, Service 클래스, Entity 등이 이에 해당
  2. View (뷰)
    • 사용자에게 보여지는 화면(UI)
    • 예: HTML, Thymeleaf, JSP, React 등의 화면 구성 요소
  3. Controller (컨트롤러)
    • 사용자의 요청을 받아 처리 흐름을 제어하고, 적절한 데이터를 View에 전달
    • Spring MVC에서 @Controller, @RestController가 이 역할을 담당

  작동 흐름 예시

  1. 사용자가 /users URL에 접근
  2. Controller가 요청을 받아 Service/Model에 처리 지시
  3. Model에서 DB 조회 후 결과 반환
  4. Controller가 View에 데이터 전달
  5. View는 결과를 렌더링하여 사용자에게 화면 출력

 

7. Git 과 GitHub의 차이점에 대해 설명해보세요.

 

Git은 로컬에서 코드의 버전을 관리하는 분산형 버전 관리 시스템이고, GitHub는 이 Git 저장소를 원격에서 호스팅하고 협업할 수 있도록 도와주는 플랫폼입니다.

Git을 사용하면 브랜치 생성, 커밋, 병합 같은 작업으로 코드 이력을 관리할 수 있고, GitHub에서는 Pull Request, 코드 리뷰, 이슈 관리 같은 기능을 통해 팀원들과 협업할 수 있습니다.