1 분 소요

자바 클래스 개념은 객체 지향 프로그래밍의 설계도이자 핵심 축입니다. 클래스는 필드로 상태(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("가속!");
    }
}

인스턴스화와 메모리 배치

  1. 클래스 로딩 → 메서드(메타) 영역
  2. 인스턴스 생성 → 힙(Heap)에 객체 배치
  3. 참조 변수 → 스택(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줄 내외 유지, 가독성 확보

질문 정리

  1. 클래스와 구조체의 차이점은?

    자바에는 구조체가 없지만, C 계열 구조체는 데이터만 저장하는 반면 클래스는 행동+데이터를 모두 포함합니다.

  2. 생성자 없이 객체를 만들 수 있나요?

    기본 생성자가 자동 생성되므로 가능하지만, 필드 초기화 로직이 필요하면 직접 정의하세요.

  3. 정적(static) 필드와 인스턴스 필드 차이는?

    static 필드는 클래스당 1개로 모든 객체가 공유, 인스턴스 필드는 객체별로 존재합니다.

  4. 메서드 오버로딩과 오버라이딩을 동시에 사용할 수 있나요?

    가능합니다. 서명이 다른 여러 메서드를 선언(오버로딩)하면서, 상속 구조에서 부모 메서드를 재정의(오버라이딩)할 수 있습니다.

  5. 객체 생성 비용이 큰가요?

    현대 JVM은 Escape Analysis·JIT 덕분에 상당히 최적화돼 있습니다. 다만 무분별한 생성은 GC 부담을 키우므로 객체 풀 사용을 고려하세요.

카테고리:

업데이트:

댓글남기기