[TIL] 객체 지향 프로그래밍 (OOP) 핵심 개념 총정리

2025. 10. 15. 20:02·CS/Architecture

객체 지향 프로그래밍?

객체 지향형 프로그래밍 (Object-oriented programming, OOP)은 프로그램을 데이터(객체) 중심으로 구성하여, 객체 간의 상호작용을 통해 동작하도록 설계하는 프로그래밍 패러다임입니다.

객체 지향 프로그래밍에서 클래스가 중요한 이유

  • 전 글에서 말했듯이 클래스는 무엇이라고 비유할 수 있을까요?
(전 글에서 조금 더 추가해서)
클래스는 객체를 생성하기 위한 설계도(blueprint) 또는 템플릿 입니다.
즉, 클래스는 객체가 가져야 할 속성과 동작을 정의하고,
실제 실행 시 이 설계도를 기반으로 객체가 메모리에 생성됩니다.
  • 객체는 클래스의 인스턴스입니다.
    • 객체가 내포한 데이터는 객체의 ‘상태’라고 하고 객체의 상태는 시간에 따라 바뀔 수 있습니다
    • 객체에 행할 수 있는 행동은 ‘동작’ 이라고 합니다
  • 즉, 객체가 갖고 있는 데이터와 객체에 행할 수 있는 동작이 무엇인지 규정할 수 있습니다.

객체 지향 프로그래밍의 특징

추상화(abstraction)

  • 복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 의미합니다.
  • 예를 들어,
    • 오토바이를 탄다고 할 때, 엔진이 어떻게 돌아가는지 알 필요는 없습니다. 단지 기어와 엑셀 사용법 정도만 알고 있으면 되죠

캡슐화(encapsulation)

  • 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 말합니다.
  • 예를 들어,
    • 오토바이 운전자는 ‘가속 페달’을 밟을 뿐 내부 엔진의 복잡한 로직은 알 수 없습니다.
    • 이렇게 내부 동작을 숨기고 필요한 인터페이스만 제공하는 것이 캡슐화입니다.

상속성(inheritance)

  • 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장하는 것을 말합니다

다형성(polymorphism)

  • 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 말합니다
  • 예를 들어,
    • ‘달린다’ 메서드가 사람, 자동차, 동물 클래스에서 각각 다르게 구현될 수 있습니다
    • 오버로딩, 오버라이딩

객체지향프로그래밍의 단점

  • 설계와 구조화에 많은 시간이 소요됩니다.
  • 처리 속도가 절차지향 프로그래밍에 비해 상대적으로 느릴 수 있습니다.
  • 클래스와 객체 간 의존성이 복잡해지면 유지보수 난이도가 높아질 수 있습니다.

🧠 요약

구분 의미 예시
추상화 핵심만 간추리기 자동차의 ‘달린다’, ‘멈춘다’ 기능만 표현
캡슐화 내부 로직 은닉 가속페달을 밟지만 엔진 동작은 숨김
상속성 코드 재사용 Animal → Dog, Cat
다형성 다양한 형태로 동작 run()이 객체마다 다르게 실행됨

결론

객체 지향 프로그래밍은 단순히 문법이 아닌 사고방식이다.
현실 세계를 코드로 모델링하며, 유지보수성과 확장성을 높이는 핵심 패러다임이다.
다만, 설계에 신중해야 하며 구조가 복잡해질수록 관리가 어려워질 수 있다.

+ 객체 지향 프로그래밍은 Java뿐만 아니라 Python, C++, Kotlin 등 대부분의 현대 언어에서 핵심 개념으로 사용

 

📘 이 글은 Udemy Java 강의와 『면접을 위한 CS 전공지식 노트』를 기반으로,

제가 직접 이해한 내용을 제 사비로 구매·학습 후 정리한 글입니다.


📚참고 자료

  • Velog - 객체지향언어란?
  • YES24 - 면접을 위한 CS 전공지식 노트
  • Udemy - 자바 강의

'CS > Architecture' 카테고리의 다른 글

DDD(Domain-Driven Design)란? 핵심 개념과 계층형 아키텍처  (0) 2026.07.11
객체 간의 결합도(Coupling)와 응집도(Cohesion)의 관계  (0) 2026.07.10
멀티모듈 환경에서 공통 모듈을 설계하는 방법: 유스케이스 분리와 인프라 설정 제어 with Spring Boot  (0) 2026.06.18
'CS/Architecture' 카테고리의 다른 글
  • DDD(Domain-Driven Design)란? 핵심 개념과 계층형 아키텍처
  • 객체 간의 결합도(Coupling)와 응집도(Cohesion)의 관계
  • 멀티모듈 환경에서 공통 모듈을 설계하는 방법: 유스케이스 분리와 인프라 설정 제어 with Spring Boot
dev_Hyeonjoon
dev_Hyeonjoon
스프링이랑 자바 공부 중 입니다!!
  • dev_Hyeonjoon
    Hyeonjoon's code
    dev_Hyeonjoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (61) N
      • CS (6)
        • Architecture (4)
        • Algorithm (2)
      • Front-end (10)
        • JavaScript (0)
        • React-project (5)
        • Vanilla[JS]-project (5)
        • study (0)
      • Tools (1)
        • GitHub (1)
        • AI (0)
      • Back-end (35) N
        • Java (27)
        • Architecture (2) N
        • JPA (0)
        • Trouble Shooting (1)
        • Spring (2)
        • DevOps (2)
      • Trouble Shooting (2)
        • Python (1)
      • 자격증 (1)
      • 알고리즘 (0)
      • 회고 (6)
        • 기타 (6)
        • 독서록 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩
    backend
    리액트
    사지방코딩
    OOP
    vanillajs
    아키텍처
    바닐라js
    객체지향
    Java
    Til
    자바기초
    파이썬
    자바
    형변환
    백엔드
    자바공부
    군대에서코딩
    토이프로젝트
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
dev_Hyeonjoon
[TIL] 객체 지향 프로그래밍 (OOP) 핵심 개념 총정리
상단으로

티스토리툴바