Java & Spring/Java

객체 지향 기본

승주우에요 2026. 1. 5. 21:03

1. 객체와 클래스 

클래스(Class)

  • 객체를 생성하기 위한 설계도
  • 필드(상태)와 메서드(행동)을 정의
  • JVM 관점에서는 클래스 로딩 시 Method Area에 적재하는 것
class Person {
    String name;
    int age;

    void speak() {
        System.out.println("아아 목소리 테스트!");
    }
}

 

객체(Object)

  • 클래스를 기반으로 실제 메모리에 생성된 실체
  • 서로 다른 객체는 각자 독립적인 상태를 가짐
Person p1 = new Person(); # Person 객체 1 
Person p2 = new Person(); # Person 객체 2

 

2. 객체 생성 과정(메모리 관점)

Person p = new Person();

JVM 내부 동작 순서

  1. 클래스 로딩
    • Person.class가 처음 사용되면, Method Area에 클래스 정보 적재되고, static 변수 / static 블록 초기화
  2. 객체 생성 (Heap)
    • new Person() 실행 Heap 영역에 객체 생성 인스턴스 필드 기본값으로 초기화
  3. 생성자 호출
    • 생성자 코드 실행
    • 필드 값 초기화
  4. 참조 변수 저장 (Stack)
    • 참조 변수 p는 Stack에 생성
    • Heap 객체의 주소값을 저장

 

 

3. 메시지 전달과 협력

객체지향에서 객체는 서로 직접 데이터를 조작하지 않는다.

-> 메서드 호출로 협력한다.

p.speak();
  • 호출하는 쪽: 메시지를 보냄
  • 호출받는 객체: 메시지를 처리

📌 중요한 점

  • 객체 내부 구현은 외부에서 알 필요 없음
  • 외부는 "무엇을 할 수 있는가"만 안다.

➡️ 캡슐화의 핵심!!

 

4. 객체 간 협력과 책임

객체지향의 본질은 클래스가 아니라 객체 간 협력이다.

  • 객체마다 하나의 책임
  • 객체들은 메시지로 협력

📌객체지향 설계 핵심 원칙

  • 객체는 역할을 갖는다.
  • 객체는 책임을 갖는다.
  • 객체는 협력을 한다.

5. 객체지향에서 중요한 사고 전환

  • 이 클래스에 뭐를 더 넣을까 -> ❌
  • 이 객체의 책임이 맞나? -> ⭕
  • 이 책임은 다른 객체가 맡는 게 맞지 않나? -> ⭕

6. 핵심 요약

  • 클래스는 설계도, 객체는 실체
  • 객체는 Heap에 생성되고, 참조 변수는 Stack에 저장
  • 객체 간 상호작용은 메서드 호출로 이루어진다
  • 객체 지향의 본질은 상속, 문법이 아닌 협력 구조

'Java & Spring > Java' 카테고리의 다른 글

생성자&this,this()  (0) 2026.01.06
메서드  (0) 2026.01.06
Static  (2) 2026.01.05
객체의 상태와 변수의 생명주기  (0) 2026.01.05
객체지향프로그래밍(OOP)  (0) 2026.01.05