본문 바로가기
Java Study

클래스(Class)의 개념

by xogns93 2024. 6. 27.

클래스와 객체(인스턴스)는 객체 지향 프로그래밍(OOP)의 핵심 개념

 

클래스 (Class)

클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 클래스는 객체가 가질 속성(데이터)과 행동(메서드)을 정의합니다. 클래스 자체는 구체적인 값을 가지지 않으며, 단지 객체를 만들기 위한 틀을 제공합니다.

  • 속성 (Attributes): 클래스가 가지는 데이터. 필드(field)라고도 합니다.
  • 메서드 (Methods): 클래스가 할 수 있는 동작. 함수라고도 합니다.

객체 (Object) 또는 인스턴스 (Instance)

객체는 클래스로부터 생성된 구체적인 개체입니다. 객체는 클래스에서 정의한 속성과 메서드를 실제로 가지고 있으며, 메모리에 할당됩니다. 객체는 클래스의 인스턴스라고도 합니다.

  • 인스턴스화 (Instantiation): 클래스를 기반으로 객체를 생성하는 과정입니다.

 

요약

  1. 클래스 (Class):
    • 객체를 생성하기 위한 청사진입니다.
    • 속성(데이터)과 메서드(동작)를 정의합니다.
    • 예: Car 클래스는 자동차의 속성(색상, 모델)과 동작(주행)을 정의합니다.
  2. 객체 (Object) 또는 인스턴스 (Instance):
    • 클래스로부터 생성된 구체적인 개체입니다.
    • 클래스에서 정의한 속성과 메서드를 실제로 가집니다.
    • 예: myCar와 yourCar는 Car 클래스의 인스턴스입니다.

클래스와 객체의 관계

  • 클래스는 객체를 만들기 위한 설계도이며, 객체는 이 설계도를 바탕으로 만들어진 실제 개체입니다.
  • 여러 객체가 하나의 클래스로부터 생성될 수 있으며, 각 객체는 독립적인 상태를 가집니다.

비유

  • 클래스: 집을 짓기 위한 설계도 (집의 구조와 기능을 정의).
  • 객체: 설계도를 바탕으로 실제로 지어진 집 (구체적인 집의 인스턴스).

클래스(Class)의 구성

 

1. 필드 (Fields)

필드는 클래스의 속성을 나타내는 변수입니다. 필드는 객체의 상태를 저장하며, 인스턴스 필드와 정적(클래스) 필드로 나눌 수 있습니다.

  • 인스턴스 필드: 각 객체가 개별적으로 가지는 속성.
  • 정적 필드: 클래스 자체에 속하며, 모든 객체가 공유하는 속성.
public class Car {
    // 인스턴스 필드
    private String color;
    private String model;

    // 정적 필드
    private static int numberOfCars;
}

 

2. 생성자 (Constructors)

생성자는 클래스의 인스턴스를 초기화하는 메서드입니다. 생성자는 클래스 이름과 동일하며, 반환 타입이 없습니다. 객체가 생성될 때 호출되어 필드의 초기값을 설정합니다.

public class Car {
    private String color;
    private String model;

    // 생성자
    public Car(String color, String model) {
        this.color = color;
        this.model = model;
    }
}

 

3. 메서드 (Methods)

메서드는 클래스의 동작을 정의하는 함수입니다. 메서드는 객체의 필드를 조작하거나 특정 기능을 수행할 수 있습니다. 메서드에는 인스턴스 메서드와 정적 메서드가 있습니다.

  • 인스턴스 메서드: 객체의 인스턴스를 통해 호출되는 메서드.
  • 정적 메서드: 클래스 이름을 통해 호출되는 메서드.
public class Car {
    private String color;
    private String model;

    public Car(String color, String model) {
        this.color = color;
        this.model = model;
    }

    // 인스턴스 메서드
    public void drive() {
        System.out.println(model + " is driving.");
    }

    // 정적 메서드
    public static void displayNumberOfCars() {
        System.out.println("Number of cars: " + numberOfCars);
    }
}

 

4. 접근 제어자 (Access Modifiers)

접근 제어자는 클래스, 필드, 생성자, 메서드의 접근 범위를 지정합니다. 주요 접근 제어자에는 private, protected, public, default가 있습니다.

  • private: 클래스 내에서만 접근 가능.
  • protected: 동일 패키지 내에서 접근 가능하며, 서브클래스에서도 접근 가능.
  • public: 모든 클래스에서 접근 가능.
  • default: 동일 패키지 내에서만 접근 가능 (명시적인 접근 제어자가 없을 때).
public class Car {
    private String color; // private 필드
    protected String model; // protected 필드
    public static int numberOfCars; // public 정적 필드

    // public 생성자
    public Car(String color, String model) {
        this.color = color;
        this.model = model;
    }

    // public 메서드
    public void drive() {
        System.out.println(model + " is driving.");
    }

    // private 메서드
    private void displayColor() {
        System.out.println("Color: " + color);
    }
}

 

5. 내부 클래스 (Inner Classes)

내부 클래스는 다른 클래스 내에 정의된 클래스입니다. 내부 클래스는 외부 클래스의 필드와 메서드에 접근할 수 있습니다. 내부 클래스에는 여러 종류가 있습니다: 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스.

public class OuterClass {
    private String outerField;

    // 인스턴스 내부 클래스
    public class InnerClass {
        public void display() {
            System.out.println("Outer field: " + outerField);
        }
    }

    // 정적 내부 클래스
    public static class StaticInnerClass {
        public void display() {
            System.out.println("Static inner class");
        }
    }
}

 

요약

  • 필드 (Fields): 객체의 속성을 나타내는 변수.
  • 생성자 (Constructors): 객체를 초기화하는 메서드.
  • 메서드 (Methods): 객체의 동작을 정의하는 함수.
  • 접근 제어자 (Access Modifiers): 클래스, 필드, 생성자, 메서드의 접근 범위를 지정.
  • 내부 클래스 (Inner Classes): 다른 클래스 내에 정의된 클래스.

 

'Java Study' 카테고리의 다른 글

필드(Field)  (0) 2024.06.28
메서드(Method)와 생성자(Constructor)  (0) 2024.06.28
객체지향 프로그래밍(Object-Oriented Programming, OOP)의 특징  (0) 2024.06.27
배열(Array)과 리스트(List)  (1) 2024.06.26
Hello World  (1) 2024.06.24