# 클래스와 다형성 개념 정리

클래스와 다형성 개념 정리

1. 클래스 (Class)

  • 정의: 객체를 생성하기 위한 설계도 또는 틀.
  • 구성 요소:
    • 생성자 (Constructor): 객체 생성 시 호출되는 특별한 메서드.
    • 메서드 (Method): 클래스 내부에서 동작을 정의하는 함수.
    • 변수 (Field): 클래스 내에서 상태나 값을 저장하는 공간.

2. 다형성 (Polymorphism)

  • 정의: 하나의 객체가 여러 타입으로 동작할 수 있는 성질.
  • 적용:
    • 부모 클래스의 참조 변수로 자식 클래스의 객체를 참조할 수 있다.
    • 오버라이딩 (Overriding): 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용.
    • 형변환 (Type Casting): 부모 타입 → 자식 타입으로 변경할 수 있으며, 이를 다운캐스팅 (Downcasting)이라 한다.

3. 생성자

  • 정의: 객체 생성 시 호출되는 메서드로, 클래스 이름과 동일하며 반환 타입이 없다.
  • 역할: 객체의 초기화, 필요한 값 설정.
  • 특징:
    • 오버로딩 가능 (동일 이름, 다른 매개변수).

4. 스테틱과 인스턴스 (Static vs. Instance)

  • 스테틱 (Static)
    • 클래스 자체에 속하는 요소로, 객체 생성 없이 사용 가능.
    • 클래스 이름으로 직접 호출 (클래스 변수, 클래스 메서드).
    • 모든 객체가 공유한다.
    • 예제:
    class Example {
        static int count = 0;
    }
    
    System.out.println(Example.count); // 클래스 이름으로 호출
  • 인스턴스 (Instance)
    • 각 객체가 개별적으로 가지는 요소.
    • 객체 생성 후 사용 (인스턴스 변수, 인스턴스 메서드).
    • 객체마다 독립적으로 존재.
    • 예제:
    class Example {
        int value = 0;
    }
    
    Example obj = new Example();
    System.out.println(obj.value); // 객체를 통해 호출

5. 다형성에서의 참조

  • 참조 변수의 역할: 부모 타입으로 자식 객체를 참조할 수 있다.
  • 예제:
class Parent {}
class Child extends Parent {}

Parent p = new Child(); // 부모 타입으로 자식 객체 참조

6. 오버라이딩 (Overriding)

  • 정의: 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것.
  • 조건:
    • 메서드 이름, 매개변수, 반환 타입이 동일해야 한다.
    • 접근 제어자는 부모 클래스보다 넓거나 동일해야 한다.

7. 다운캐스팅 (Downcasting)

  • 정의: 부모 타입의 참조 변수를 자식 타입으로 변환하는 것.
  • 예제:
Parent p = new Child();
Child c = (Child) p; // 다운캐스팅

8. 오버로딩 (Overloading)

  • 정의: 동일한 이름의 메서드를 여러 개 정의할 수 있는 기능.
  • 특징:
    • 매개변수의 타입, 개수, 순서가 달라야 한다.