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

2025. 11. 22. 16:18·개발 공부/Java-Spring

 

객체 지향 프로그래밍(OOP)의 특징은 크게 **4가지(캡슐화, 상속, 다형성, 추상화)**로 요약됩니다.

 


 

 

1. 캡슐화 (Encapsulation)

"데이터를 보호하고, 필요한 부분만 밖으로 드러낸다."

  • 개념: 서로 연관된 데이터(필드)와 그 데이터를 처리하는 메서드를 하나의 '클래스'라는 캡슐로 묶는 것입니다.
  • 핵심 목적: 정보 은닉 (Information Hiding)
    • 객체 내부의 데이터는 숨기고(private), 외부에는 허용된 기능(public 메서드)만 제공합니다.
    • 예시: TV의 내부 회로(데이터)는 감춰져 있고, 우리는 리모컨 버튼(메서드)만 눌러서 조작합니다. 회로를 직접 건드리면 고장 납니다.
  • 장점: 외부에서 잘못된 데이터를 넣는 것을 방지하여 코드의 안정성을 높입니다. (Setter 없이 생성자로 값을 넣는 이유)

2. 상속 (Inheritance)

"부모의 기능을 자식이 물려받아 재사용한다."

  • 개념: 기존의 클래스(부모)를 재사용하여 새로운 클래스(자식)를 작성하는 것입니다. (extends 키워드)
  • 장점:
    • 코드 재사용: 공통된 코드를 부모에만 작성하면 되므로 중복이 줄어듭니다.
    • 유지보수: 부모 클래스만 수정하면 자식 클래스들도 자동으로 수정 효과를 봅니다.
  • 주의점: 무분별한 상속은 클래스 간의 결합도를 너무 높일 수 있어, 최근에는 상속보다는 **조합(Composition, 다른 객체를 필드로 갖는 것)**을 선호하는 추세입니다.

3. 다형성 (Polymorphism) 🔥 (가장 중요!)

"하나의 객체가 여러 가지 형태를 가질 수 있다."

  • 개념: 같은 이름의 메서드를 호출했을 때, 실제 객체에 따라 다른 동작을 수행하는 능력입니다.
  • 구현 방법:
    • 오버라이딩 (Overriding): 부모의 메서드를 자식이 재정의하는 것.
    • 오버로딩 (Overloading): 같은 이름의 메서드를 매개변수만 다르게 여러 개 만드는 것.
  • Spring과의 관계: 앞서 질문하신 **'의존성 역전(DIP)'**과 **'의존성 주입(DI)'**이 가능한 이유가 바로 이 다형성 때문입니다.
    • 예시: 자동차 인터페이스의 엑셀()을 밟았는데, 실제 차가 소나타면 부드럽게 나가고, 페라리면 빠르게 나가는 것. 운전자는 자동차라는 껍데기만 알면 됩니다.

4. 추상화 (Abstraction)

"불필요한 정보는 숨기고, 중요한 특징만 뽑아낸다."

  • 개념: 복잡한 시스템에서 핵심적인 개념이나 기능만 간추려내는 것입니다. (interface, abstract class)
  • 예시:
    • 지하철 노선도는 실제 지형(구불구불한 길, 건물의 위치 등)은 다 무시하고, '역 이름'과 '연결 선'이라는 핵심만 뽑아내서 보여줍니다. 이것이 추상화입니다.
  • 장점: 복잡한 현실 세계를 모델링하여 코드로 옮기기 쉽게 만들어 줍니다.

 

 

'개발 공부 > Java-Spring' 카테고리의 다른 글

불변의 객체 의 정의  (0) 2025.12.10
spring ai 해보기  (0) 2025.12.06
객체의 종류  (0) 2025.11.20
자바 예약어 final vs static  (0) 2025.10.23
interface vs abstract class  (0) 2025.09.26
'개발 공부/Java-Spring' 카테고리의 다른 글
  • 불변의 객체 의 정의
  • spring ai 해보기
  • 객체의 종류
  • 자바 예약어 final vs static
cookiboii
cookiboii
초보 개발자입니다.
  • cookiboii
    Just Do it
    cookiboii
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 잡소리 (2)
      • vscode꾸미기 (1)
      • 회사공부 (0)
      • 면접복기 (5)
      • 개발취직관련 좋은 글귀 (12)
      • 개발 공부 (58)
        • 백준 (0)
        • web (3)
        • js&ts&react (4)
        • Java-Spring (18)
        • 개발책 리뷰 (0)
        • c++ (0)
        • git (0)
        • code up 문제 (5)
        • 네트워크 (5)
        • 자료구조&알고리즘 (2)
        • ci,cd (1)
        • 프로젝트 (9)
        • sql (4)
        • 컴퓨터구조 (1)
        • 운영체제 (5)
        • python (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

    • 네이버블로그
    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    js #예약어 #자바스크랩트
    깃허브 #깃 #커밋
    js #제이쿼리 #비동기통신 #코딩 #프로그래밍
    프로그래밍
    롤 #리그오브레전드
    springai #spring #java
    자바 #Java #JPA #개발자 #개발 #초보
    라이엇 #api #롤api
    사이드프로젝트 #토이프로젝트 #개발 #개발자
    Java
    개발
    코드업 #코딩문제
    ci #개발 #git
    자바
    포켓몬 #vscode #vscode꾸미기 #개발
    JVM
    코딩
    js #web
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
cookiboii
객체 지향 프로그래밍(OOP)의 특징
상단으로

티스토리툴바