객체지향 프로그래밍(OOP, Object-Oriented Programming)은 데이터를 객체(object)로 추상화하여,
객체 간의 상호작용을 통해 문제를 해결하는 프로그래밍 패러다임
특징설명
| 캡슐화 (Encapsulation) | 데이터(속성)와 기능(메서드)을 하나로 묶고, 외부로부터 내부 구현을 숨김 |
| 상속 (Inheritance) | 기존 클래스(부모)의 속성과 기능을 새로운 클래스(자식)가 물려받음 |
| 다형성 (Polymorphism) | 하나의 인터페이스로 여러 기능을 구현할 수 있음 |
| 추상화 (Abstraction) | 복잡한 구현은 숨기고, 필요한 기능만 인터페이스로 노출 |
✅ OOP -> 코드의 재사용성, 유지보수성, 확장성
객체지향 설계의 5가지 핵심 원칙으로, 유지보수와 확장에 강한 설계 가능
약어원칙 이름설명
| S | SRP (Single Responsibility Principle) | 클래스는 하나의 책임만 가져야 함 |
| O | OCP (Open/Closed Principle) | 확장에는 열려 있고, 수정에는 닫혀 있어야 함 |
| L | LSP (Liskov Substitution Principle) | 자식 클래스는 부모 클래스를 대체할 수 있어야 함 |
| I | ISP (Interface Segregation Principle) | 사용하지 않는 인터페이스는 구현하지 않아야 함 |
| D | DIP (Dependency Inversion Principle) | 추상화에 의존해야지, 구체화에 의존하면 안 됨 |
- 블로킹(Blocking) → 현재 작업이 완료될 때까지 다음 작업을 멈추고 기다림
- 예: 파일을 다 읽을 때까지 대기
- 논블로킹(Non-blocking) → 작업이 완료되지 않아도 다른 작업을 수행할 수 있음
- 예: 파일 읽기 요청을 보내고, 결과가 올 때까지 다른 작업 수행
🔑 스레드의 제어권을 차단하느냐가 핵심입니다.
- 동기(Synchronous) → 요청한 작업의 완료를 기다린 후 다음 작업 실행
- 순차적이고 직관적이나 느릴 수 있음
- 비동기(Asynchronous) → 작업이 끝나지 않아도 다음 작업을 바로 수행
- 콜백, 이벤트 기반 처리로 병렬 작업 가능
⏱️ ‘기다리는가’ 여부에 따라 구분됩니다.
구분설명
| 동기 + 블로킹 | 가장 기본적인 처리 방식. 순서대로 처리하면서 대기 |
| 동기 + 논블로킹 | 순서대로 처리하지만, 다른 작업을 병행 가능 |
| 비동기 + 논블로킹 | 병렬적이고 효율적. 콜백, 이벤트 기반 |
| 비동기 + 블로킹 | 거의 사용하지 않음. 비효율적 |
✔ 동기/비동기는 작업 흐름 관점, 블로킹/논블로킹은 스레드 실행 관점입니다. 예: JavaScript setTimeout()은 비동기 + 논블로킹 구조입니다.
- 절차지향 프로그래밍 → 프로그램을 순차적 흐름(함수 중심)으로 구성
- 예: C언어, 단순한 스크립트
- 객체지향 프로그래밍 → 데이터(객체)와 그 동작(메서드)을 중심으로 구성
- 예: Java, Python, C++
구분절차지향객체지향
| 단위 | 함수 중심 | 객체 중심 |
| 재사용성 | 낮음 | 높음 |
| 유지보수 | 어렵다 | 용이함 |
- Call by Value: 함수에 값 자체를 복사하여 전달 → 원본 변수는 영향 없음
- Call by Reference: 함수에 참조(주소)를 전달 → 원본 변수에 영향 가능
Python은 기본적으로 Call by Object Reference (값이 참조되는 방식)
항목프레임워크라이브러리
| 제어 흐름 | 프레임워크가 흐름을 주도 (제어의 역전) | 개발자가 직접 흐름을 제어 |
| 사용 방식 | 내가 프레임워크에 맞춰야 함 | 내가 필요할 때 호출해서 사용 |
| 예시 | Django, Spring | jQuery, NumPy |
✅ 프레임워크는 "틀"이고, 라이브러리는 "도구"입니다.
도메인 주도 설계(DDD)는 복잡한 시스템을 업무 중심 모델로 분리하고 설계하는 방법
- 도메인 모델 중심으로 아키텍처 구성
- 유비쿼터스 언어: 개발자와 비즈니스 전문가가 동일한 언어로 의사소통
- Bounded Context: 도메인의 의미가 일관된 경계
✔ DDD는 복잡한 비즈니스 로직이 많은 서비스에 특히 효과적입니다.
마이크로서비스 아키텍처(MSA)는 애플리케이션을 독립적으로 배포 가능한 작은 서비스 단위로 분리하여 개발하는 아키텍처입니다.
- 각 서비스는 독립적 데이터베이스, 로직, 배포를 가짐
- 장애 격리, 빠른 배포 가능
- ex) 사용자 서비스, 결제 서비스, 알림 서비스 등 분리
✅ 단일 장애점 감소, 유연한 확장, DevOps 환경에 적합
함수형 프로그래밍(Functional Programming)은 상태를 변경하지 않고, 순수 함수의 조합으로 프로그램을 구성하는 패러다임입니다.
- 순수 함수: 동일 입력 → 동일 출력 (부작용 없음)
- 불변성(immutability): 값 변경 없이 처리
- 고차 함수: 함수를 인자로 받거나 반환 가능
예시 언어: Haskell, Elixir Python, JS도 지원
영역설명
| Code | 실행할 프로그램의 코드 (함수 등) |
| Data | 전역변수, static 변수 저장 |
| Heap | 동적 메모리 할당 공간 (malloc, new) |
| Stack | 함수 호출 시 지역 변수, 리턴 주소 등 저장 |
+----------------------+ ← 낮은 주소
| Code 영역 |
+----------------------+
| Data 영역 |
+----------------------+
| Heap 영역 | ↓ 아래로 확장
| |
+----------------------+
| |
| Stack 영역 | ↑ 위로 확장
+----------------------+ ← 높은 주소
🔍 Heap과 Stack은 메모리의 같은 공간을 공유하며, 충돌 시 Stack Overflow 등 오류 발생 가능
'Programming > 기술 면접' 카테고리의 다른 글
| 🌐 RESTful API 완벽 가이드 — 개념, 예시, 면접 대비까지 (0) | 2025.08.05 |
|---|---|
| [개발자 기술 면접 대비] 네트워크 관련 기출 (6) | 2025.08.04 |
| ✅ 웹 서버 vs 웹 프레임워크 차이 (2) | 2025.07.30 |
| [개발자 기술 면접 대비] 📦 허프만 코딩(Huffman Coding)이란? (3) | 2025.07.25 |
| [개발자 기술 면접 대비] 📚 선형 구조 자료형에서의 가산성과 동차성 (3) | 2025.07.25 |