객체 지향 프로그래밍?
객체 지향형 프로그래밍 (Object-oriented programming, OOP)은 프로그램을 데이터(객체) 중심으로 구성하여, 객체 간의 상호작용을 통해 동작하도록 설계하는 프로그래밍 패러다임입니다.
객체 지향 프로그래밍에서 클래스가 중요한 이유
- 전 글에서 말했듯이 클래스는 무엇이라고 비유할 수 있을까요?
(전 글에서 조금 더 추가해서)
클래스는 객체를 생성하기 위한 설계도(blueprint) 또는 템플릿 입니다.
즉, 클래스는 객체가 가져야 할 속성과 동작을 정의하고,
실제 실행 시 이 설계도를 기반으로 객체가 메모리에 생성됩니다.
- 객체는 클래스의 인스턴스입니다.
- 객체가 내포한 데이터는 객체의 ‘상태’라고 하고 객체의 상태는 시간에 따라 바뀔 수 있습니다
- 객체에 행할 수 있는 행동은 ‘동작’ 이라고 합니다
- 즉, 객체가 갖고 있는 데이터와 객체에 행할 수 있는 동작이 무엇인지 규정할 수 있습니다.
객체 지향 프로그래밍의 특징
추상화(abstraction)
- 복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 의미합니다.
- 예를 들어,
- 오토바이를 탄다고 할 때, 엔진이 어떻게 돌아가는지 알 필요는 없습니다. 단지 기어와 엑셀 사용법 정도만 알고 있으면 되죠
캡슐화(encapsulation)
- 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 말합니다.
- 예를 들어,
- 오토바이 운전자는 ‘가속 페달’을 밟을 뿐 내부 엔진의 복잡한 로직은 알 수 없습니다.
- 이렇게 내부 동작을 숨기고 필요한 인터페이스만 제공하는 것이 캡슐화입니다.
상속성(inheritance)
- 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장하는 것을 말합니다
다형성(polymorphism)
- 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 말합니다
- 예를 들어,
객체지향프로그래밍의 단점
- 설계와 구조화에 많은 시간이 소요됩니다.
- 처리 속도가 절차지향 프로그래밍에 비해 상대적으로 느릴 수 있습니다.
- 클래스와 객체 간 의존성이 복잡해지면 유지보수 난이도가 높아질 수 있습니다.
🧠 요약
| 구분 | 의미 | 예시 |
| 추상화 | 핵심만 간추리기 | 자동차의 ‘달린다’, ‘멈춘다’ 기능만 표현 |
| 캡슐화 | 내부 로직 은닉 | 가속페달을 밟지만 엔진 동작은 숨김 |
| 상속성 | 코드 재사용 | Animal → Dog, Cat |
| 다형성 | 다양한 형태로 동작 | run()이 객체마다 다르게 실행됨 |
결론
객체 지향 프로그래밍은 단순히 문법이 아닌 사고방식이다.
현실 세계를 코드로 모델링하며, 유지보수성과 확장성을 높이는 핵심 패러다임이다.
다만, 설계에 신중해야 하며 구조가 복잡해질수록 관리가 어려워질 수 있다.
+ 객체 지향 프로그래밍은 Java뿐만 아니라 Python, C++, Kotlin 등 대부분의 현대 언어에서 핵심 개념으로 사용
📘 이 글은 Udemy Java 강의와 『면접을 위한 CS 전공지식 노트』를 기반으로,
제가 직접 이해한 내용을 제 사비로 구매·학습 후 정리한 글입니다.
📚참고 자료
'CS > Architecture' 카테고리의 다른 글
| DDD(Domain-Driven Design)란? 핵심 개념과 계층형 아키텍처 (0) | 2026.07.11 |
|---|---|
| 객체 간의 결합도(Coupling)와 응집도(Cohesion)의 관계 (0) | 2026.07.10 |
| 멀티모듈 환경에서 공통 모듈을 설계하는 방법: 유스케이스 분리와 인프라 설정 제어 with Spring Boot (0) | 2026.06.18 |
