자바의 클래스와 객체
포스트
취소

자바의 클래스와 객체

클래스(Class)란?

Java_Class

  • 클래스는 객체를 생성하기 위한 설계도이다
  • 자바에서 클래스는 객체의 상태를 나타내는 필드(변수)와 객체의 행동을 나타내는 메서드(함수)로 구성된다
  • 클래스는 코드 영역에 위치하며, 이를 통해 다양한 객체를 생성하여 사용할 수 있다

객체(Object)란?

  • 객체(Object)는 클래스의 설계도를 바탕으로 생성된 실체다
  • 자바에서 객체는 힙(heap) 영역에 위치한다
  • 객체는 클래스의 인스턴스로도 불린다
    • ‘인스턴스’는 특정 클래스로부터 생성된 객체를 지칭하는 용어다.

필드(Field)

  • 필드는 클래스에 포함된 변수를 의미
  • 필드는 객체의 상태, 즉 데이터를 저장한다.
  • 예를 들어, Animal 클래스에는 name, age와 같은 필드가 있을 수 있다.

필드의 종류

  • 필드는 클래스에 포함된 변수다
  • 필드/멤버/속성/변수 모두 동일한 의미로 사용된다.
  • 선언된 위치와 선언자에 따라 크게 클래스 변수(static variable), 인스턴스 변수(instance variable), 지역 변수(local variable)로 구분된다
변수생성 시기소멸 시기저장 메모리
클래스 변수클래스가 메모리에 올라갈 때프로그램이 종료될 때데이터 영역
인스턴스 변수인스턴스가 생성될 때인스턴스가 소멸할 때힙 영역
지역 변수블록 내에서 변수의 선언문이 실행될 때블록을 벗어날 때스택 영역

클래스 변수(Static Variable)

  • 클래스 변수는 static 키워드를 사용해 선언하며, 모든 인스턴스가 공유하는 변수
  • 클래스가 메모리에 로드될 때 생성되고, 프로그램 종료 시 소멸한다
  • 모든 인스턴스가 공유해야하는 값을 유지하기 위해 사용된다
  • 인스턴스 생성 없이도 사용 가능하다

인스턴스 변수(Instance Variable)

  • 인스턴스 변수는 각 인스턴스마다 별도로 존재하는 변수
  • 객체가 생성될 때마다 생성되고, 객체가 소멸할 때 소멸한다
  • 각 인스턴스의 상태를 저장할 때 사용한다

지역 변수(Local Variable)

  • 지역 변수는 메서드 내에서 선언되며, 메서드의 호출과 함께 생성되어 메서드가 종료되면 소멸한다
  • 특정 메서드 내에서만 필요하며, 메서드 스코프를 벗어나면 필요없는 데이터를 위해 사용한다

메서드(Methods)

Java_Method

  • 메서드는 클래스 내에 정의된 함수로, 클래스의 동작을 정의한다
  • 객체의 동작을 정의하는 데 사용되며, 특정 작업을 수행하거나 값을 반환한다
  • 메서드는 접근 제어자, 반환 타입, 메서드 이름, 구현부로 구성된다
  • 메서드는 클래스 메서드와 인스턴스 메서드로 나뉜다

클래스 메서드(Static Method)

  • 클래스 메서드는 static 키워드로 정의된다
  • 클래스 메서드는 인스턴스 변수를 사용할 수 없으며, 클래스 이름으로 직접 호출할 수 있다

인스턴스 메서드(Instance Method)

  • 인스턴스 메서드는 static 키워드 없이 정의된다
  • 이 메서드는 인스턴스 변수와 인스턴스 메서드에 접근할 수 있다

생성자(Constructor)

  • 생성자는 클래스의 인스턴스를 생성할 때 호출되는 특별한 메서드다
  • 생성자는 메서드의 이름은 클래스 이름과 동일하며, 반환 타입이 없다
  • 생성자는 인스턴스의 초기 상태를 설정하는 데 사용된다
  • 자바에서는 생성자를 명시적으로 정의하지 않으면 기본 생성자를 자동으로 제공한다
    • 기본 생성자는 아무 인자도 받지 않고, 아무것도 하지 않는 생성자다

접근제어자(Access Modifiers)란?

  • 접근제어자는 클래스, 메서드, 필드에 대한 접근을 제한한다
  • 자바에는 private, default, protected, public 네 가지 접근제어자가 있다

  • private: 같은 클래스 내에서만 접근 가능
  • default: 같은 패키지 내에서만 접근 가능
  • protected: 같은 패키지 또는 다른 패키지의 자손 클래스에서 접근 가능
  • public: 어떤 클래스에서도 접근 가능
접근 제어자같은 클래스의 멤버같은 패키지의 멤버자식 클래스의 멤버그 외의 영역
public
protectedX
defaultXX
privateXXX

정리

  • 클래스(Class): 객체를 생성하기 위한 템플릿(설계도)
  • 객체(Object): 클래스와 new 연산자를 통해 만들어진 실제 데이터가 담긴 변수
  • 인스턴스(Instance): 클래스로부터 생성된 객체
  • 클래스 필드/멤버/속성: 클래스 내의 변수
  • 메서드(Method): 클래스 내의 함수
  • 생성자(Constructor): 객체 생성 시 멤버 데이터의 초기화를 담당하는 특수 메서드

예시로 이해하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 클래스 예시
public class Animal {
    // 필드(멤버 변수) 선언
    private String name; // 인스턴스 변수
    private int age;     // 인스턴스 변수
    public static int count = 0; // 클래스 변수(static variable), 모든 인스턴스가 공유

    // 생성자
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
        Animal.count++; // 클래스 변수 사용
    }

    // 인스턴스 메서드
    public void displayInfo() {
        System.out.println("Name: " + this.name + ", Age: " + this.age);
    }

    // 클래스 메서드(static method)
    public static int getCount() {
        return count; // 클래스 변수에 접근
    }

    // 메인 메서드, 프로그램의 진입점
    public static void main(String[] args) {
        Animal dog = new Animal("Buddy", 3); // 객체 생성
        dog.displayInfo(); // 인스턴스 메서드 호출

        System.out.println("Total Animals: " + Animal.getCount()); // 클래스 메서드 호출
    }
}

  • 클래스(Class) : Animal 클래스는 객체를 생성하기 위한 템플릿으로, 이름과 나이를 가진 동물을 나타낸다
  • 객체(Object)/인스턴스(Instance) : new Animal("Buddy", 3)을 통해 생성된 dogAnimal 클래스의 인스턴스(객체)다
  • 필드(Field) : name, age는 인스턴스 변수로 각 객체의 상태를 나타낸다. count는 클래스 변수로 모든 인스턴스에 의해 공유된다.
  • 메서드(Method) : displayInfo()는 인스턴스 메서드로, 객체의 상태를 출력한다. getCount()는 클래스 메서드로, 생성된 모든 Animal 객체의 수를 반환한다.
  • 접근제어자(Access Modifiers) : private, public, static 키워드는 클래스, 메서드, 필드에 대한 접근을 제한한다. 예를 들어, nameage 필드는 클래스 내부에서만 접근 가능한 private 접근 제어자를 사용한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

집합의 기수 (Cardinality of Sets)

자바와 객체지향

Comments powered by Disqus.