객체지향 프로그래밍(OOP)
절차지향(Procedure-Oriented)이 "동작 중심" 이라면, 객체지향은 "현실 세계의 개체 모델링 중심"이다.
ex)
절차지향 -> "주문한다 -> 결제한다 -> 배송한다"
객체지향 -> Customer / Order / Payment / Delivery 객체 설계
객체지향의 핵심 구성요소
Class: 객체 설계도
Object: 클래스의 인스턴스
Field: 상태(데이터)
Method: 행동(로직)
ex)
class Car {
String color; //상태
int speed;
void drive() { //행동
System.out.println("Driving");
}
}
ex) Java 구현 방식
class Account {
private int balace;
publice void deposit(int money) {
balance += money;
}
public int getBalance() {
return balace;
}
}
private -> 직접 접근 차단 Getter/Setter -> 간접 접근 허용* 핵심 포인트
-> 데이터 보호 + 접근 통제
3-2 상속(Inheritance) ex)구조
class Animal {
void eat() {}
}
class Dog extends Animal {
void bark() {}
}
* Animal -> 부모(Super Class)
* Dog -> 자식(Sub Class)특징3-3 다형성(Polymorphism)
개념:
"하나의 인터페이스, 여러 구현"
즉, 동일 메서드 호출 -> 객체에 따라 다르게 동작
유형:
1. 오버로딩(Compile Time)
void print(int a)
void print(String s)
3-4 추상화(Abstraction)
개념:
핵심 기능만 노출
내부 구현 숨김
구현방식:
1) Abstract Class
abstract class Shape {
abstraact void draw();
}
2) Interface
interface Flyable {
void fly();
}
목적:
설계 표준화
결합도 감소
확장성 증가
4대 특징 관계 구조
추상화 -> 설계 모델 정의
↓
상속 -> 구조 확장
↓
다형성 -> 동작 확장
↓
캡슐화 -> 내부 보호
즉,
** 객체지향은 단순 문법 개념이 아니라:
JVM 메모리 구조와 연결, 프레임 워크 설계 기반, 대규모 시스템 유지보수 핵심
ex)
class User {
static int count = 0;
String name;
} 저장위치*핵심
"객체 실체는 Heap"8.2.3 Reference <-> StackStack Frame구성
Local Variables
Operand Stack
Return Address
영향:
Method Area -> 필드 메타 정보
Heap -> 실제 데이터
접근 -> Method 호출만 허용
즉, 캡슐화 = 메모리 직접 접근 차단 설계
9.2 상속 <-> Method Area Class 구조 확장Method Area 구조:
Animal Class Metadata
Dog Class Metadata
-> Animal 참조
특징:
부모 메서드 재사용
vtable 기반 탐색
9.3 다형성 <-> Heap 객체 + Stack 참조메모리
Stack -> Animal 타입 참조
Heap -> Dog 객체
실행시
Method Area -> Dog 메서드 호출
동적 바인딩 수행 9.4 추상화 <-> 인터페이스 메타데이터 흐름
1. ClassLoader -> User 로딩
2. Method Area -> 클래스 저장
3. Heap -> 객체 생성
4. Stack -> 참조 저장 10.2 사용실무 관점 연결
12.1 Memory Leak
원인: Heap 객체 참조 유지, static 컬렉션
OOP 설계 문제 -> JVM 메모리 문제
12.2 DI/ IoC 컨테이너
Spring:
Bean -> Heap 생성
Singleton -> GC 대상 아님
12.3 대용량 트래픽
객체 생성 과다:
Young GC증가
Promotion증가
OOP 객체는 JVM 어디 저장?
클래스 메타데이터는 Method Area에 저장되고, 객체 인스턴스는 Heap에 생성되며, 참조 변수와 메서드 실행 프레임은 Stack에 저장된다.
다형성 메모리 관점 설명?
참조 타입은 Stack에, 실제 객체는 Heap에 존재하며 실행 시 동적 바인딩으로 실제 객체 메서드가 호출된다.
캡슐화 JVM 영향?
필드 접근을 메서드로 제한해 Heap 데이터 직접 접근을 제어하는 구조이다.
** 최종 요약
Class 설계 -> Method Area
Object 생성 -> Heap
Reference -> Stack
Method 실행 -> Stack Frame
GC -> Heap 정리
즉, OOP는 "논리 설계", JVM 메모리는 "물리 실행 구조"이며 둘은 1:1로 매핑된다.