3. Java

[JAVA] 클래스(Class)의 개념

Dorothy. 2024. 7. 22. 07:37

안녕하세요? 다시 돌아온 돌아버릴거같은 Dorothy입니다!

(이유를 적으려다가  tmi 같아서 이하 생략..)

 

 


 

오늘은 1) 클래스(Class)와 객체(인스턴스)의 개념과 관계,

그리고 2) 객체지향프로그래밍(OOP)의 개념에 대해서 공부 해보겠습니다.


 

 

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

 

1. 클래스 (Class)

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

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

 

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

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

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

 


용어 설명

 

클래스 (Class):

객체를 생성하기 위한 청사진입니다.

속성(데이터)과 메서드(동작)를 정의합니다.

예: Car 클래스는 자동차의 속성(색상, 모델)과 동작(주행)을 정의합니다.

 

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

클래스로부터 생성된 구체적인 개체입니다.

클래스에서 정의한 속성과 메서드를 실제로 가집니다.

예: myCar와 yourCar는 Car 클래스의 인스턴스입니다.

 

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

 

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

2] 클래스(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)

내부 클래스는 다른 클래스 내에 정의된 클래스입니다. 내부 클래스는 외부 클래스의 필드와 메서드에 접근할 수 있습니다. 이것은 1)인스턴스 내부 클래스, 2)정적 내부 클래스, 3)지역 내부 클래스, 4)익명 내부 클래스로 구성되어 있습니다.

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): 다른 클래스 내에 정의된 클래스.

 


 

이상입니다! 

 

 

archived by. https://xogns93.tistory.com/7