🧱 객체 지향 프로그래밍(OOP) — Java로 현실을 코드로 옮기다
핵심 아이디어 : 부품을 먼저 만들고, 조립해서 완성품을 만든다. 소프트웨어도 똑같다.
1️⃣ 객체(Object)란?
현실 세계에서 다른 것과 구별할 수 있는 모든 것이 객체다.
물리적 객체 → 자동차, 사람, 책
개념적 객체 → 주문, 강의, 학과
객체는 속성과 동작으로 구성된다.
| 현실 세계 | Java |
|---|---|
| 속성 (이름, 색상, 나이) | 필드 (field) |
| 동작 (달린다, 멈춘다) | 메서드 (method) |
현실의 객체를 필드와 메서드로 정의하는 과정을 객체 모델링(Object Modeling) 이라 한다.
2️⃣ 객체는 메서드로 대화한다
객체들은 메서드 호출을 통해 서로 데이터를 주고받는다.
int result = add(10, 20); // 10, 20을 전달 → 결과를 반환받아 저장
호출한 쪽 → 매개값(Argument) 전달 → 메서드 실행
호출한 쪽 ← 리턴값(Return) 수신 ← 메서드 종료
3️⃣ 객체 간의 3가지 관계
| 관계 | 설명 | 예시 |
|---|---|---|
| 집합 | 완성품 ↔ 부품 | 자동차 — 엔진, 타이어 |
| 사용 | 다른 객체의 메서드를 호출 | 사람 → 자동차.달린다() |
| 상속 | 부모의 특성을 자식이 물려받음 | 기계(부모) → 자동차(자식) |
4️⃣ OOP의 3대 특징
🔒 캡슐화 (Encapsulation)
데이터(필드)와 동작(메서드)을 하나로 묶고, 내부 구현을 외부에 숨긴다.
외부 객체 → 공개된 메서드만 접근 가능
→ 내부 필드 직접 접근 불가
Java에서는 접근 제한자(Access Modifier) 로 노출 범위를 제어한다.
외부의 잘못된 사용으로부터 객체를 보호하는 것이 목적이다.
🧬 상속 (Inheritance)
부모 객체의 필드와 메서드를 자식 객체가 그대로 물려받는다.
기계 (부모)
└── 자동차 (자식) ← 기계의 필드·메서드를 그대로 사용 가능
상속의 2가지 이점
- 코드 재사용 — 중복 코딩 없이 부모의 구현을 활용
- 유지보수 효율 — 부모를 수정하면 모든 자식에 자동 반영
🎭 다형성 (Polymorphism)
사용 방법은 같지만, 실행 결과가 다양하게 나오는 성질이다.
drive(Car car) ← 일반 자동차 전달 → 일반 주행
drive(Car car) ← 스포츠카 전달 → 고성능 주행
같은 메서드 호출이지만 어떤 객체를 넣느냐에 따라 결과가 달라진다.
다형성은 상속과 인터페이스 구현을 통해 얻어진다.
📌 핵심 요약
객체 = 필드(속성) + 메서드(동작)
OOP = 객체를 만들고 → 조립해서 → 프로그램 완성
캡슐화 = 내부를 숨기고 필요한 것만 공개
상속 = 부모의 것을 자식이 물려받아 재사용
다형성 = 같은 방법으로 호출, 다른 결과