클래스(Class) 개념 정의·구성·OOP 4대 특성
자바 클래스 개념은 객체 지향 프로그래밍의 설계도이자 핵심 축입니다. 클래스는 필드로 상태(state)를, 메서드로 행동(behavior)을 정의하며, 이를 기반으로 무수한 인스턴스(객체)가 생성됩니다.
클래스와 객체란?
클래스(Class) – 설계도
- 데이터+행동 묶음
- 재사용·유지보수성을 높여주는 청사진
객체(Object) – 실체
- 클래스로부터
new키워드로 메모리에 생성 - 상태(field)와 행동(method)을 실제로 가짐
TIP: “클래스 == 설계서, 객체 == 제품”으로 기억하면 쉽습니다.
클래스의 기본 구성 요소
| 구성 | 설명 | 예시 코드 |
|---|---|---|
| 필드(Field) | 객체의 상태 저장 | String modelName; |
| 메서드(Method) | 객체의 행동 수행 | void accelerate() |
| 생성자(Constructor) | 인스턴스 초기화 | Car(String name){...} |
class Car {
String modelName; // 필드
int maxSpeed; // 필드
Car(String modelName){ // 생성자
this.modelName = modelName;
}
void accelerate(){ // 메서드
System.out.println("가속!");
}
}
인스턴스화와 메모리 배치
- 클래스 로딩 → 메서드(메타) 영역
- 인스턴스 생성 → 힙(Heap)에 객체 배치
- 참조 변수 → 스택(Stack)에 주소 저장
Car myCar = new Car("Tesla"); // 힙: Car 객체 / 스택: myCar 참조
메서드 오버로딩과 다형성
메서드 오버로딩(Overloading)
동일한 이름, 서명(매개변수)만 다른 메서드 다중 정의
int add(int a, int b) { return a + b; }
double add(double a,double b){ return a + b; }
다형성(Polymorphism)
- 오버로딩: 컴파일 시점 다형성
- 오버라이딩: 런타임 다형성
OOP 4대 특성 한눈에
| 특성 | 핵심 개념 | 장점 |
|---|---|---|
| 캡슐화 | 필드 private + 게터/세터 |
내부 데이터 보호 |
| 상속 | extends로 기존 클래스 재사용 |
중복 코드 감소 |
| 다형성 | 하나의 타입, 여러 동작 | 인터페이스 교체 용이 |
| 추상화 | 불필요 세부 숨김 | 복잡성 ↓ 유지보수 ↑ |
클래스 설계 Best Practice
- 단일 책임 원칙(SRP) – 클래스는 하나의 역할에 집중
- 불변 객체 – 상태 변경이 필요 없으면
final필드 사용 - 접근 제어자 –
private기본, 필요한 범위에만public공개 - 메서드 분할 – 길이 30줄 내외 유지, 가독성 확보
질문 정리
-
클래스와 구조체의 차이점은?
자바에는 구조체가 없지만, C 계열 구조체는 데이터만 저장하는 반면 클래스는 행동+데이터를 모두 포함합니다.
-
생성자 없이 객체를 만들 수 있나요?
기본 생성자가 자동 생성되므로 가능하지만, 필드 초기화 로직이 필요하면 직접 정의하세요.
-
정적(static) 필드와 인스턴스 필드 차이는?
static필드는 클래스당 1개로 모든 객체가 공유, 인스턴스 필드는 객체별로 존재합니다. -
메서드 오버로딩과 오버라이딩을 동시에 사용할 수 있나요?
가능합니다. 서명이 다른 여러 메서드를 선언(오버로딩)하면서, 상속 구조에서 부모 메서드를 재정의(오버라이딩)할 수 있습니다.
-
객체 생성 비용이 큰가요?
현대 JVM은 Escape Analysis·JIT 덕분에 상당히 최적화돼 있습니다. 다만 무분별한 생성은 GC 부담을 키우므로 객체 풀 사용을 고려하세요.
댓글남기기