자바/객체지향 프로그래밍(OOP)

클래스란?

Blue_bull 2025. 1. 26. 23:54

Java 클래스 정리


1. 클래스의 정의

  • 클래스(Class)는 객체를 생성하기 위한 청사진(Template) 또는 설계도입니다.
  • 클래스는 속성(멤버 변수)동작(메서드)을 정의하며, 이들을 기반으로 객체를 생성합니다.

2. 클래스의 구성 요소

  1. 필드(Field): 객체의 속성을 나타내는 변수.
    • 클래스 내부에 선언된 변수로, 객체의 데이터를 저장합니다.
    • 예) String name, int age.
  2. 메서드(Method): 객체가 수행할 동작(기능)을 정의.
    • 특정 작업을 수행하는 코드 블록.
    • 예) void run(), int getAge().
  3. 생성자(Constructor):
    • 객체 생성 시 호출되는 특수한 메서드.
    • 클래스와 이름이 같고 반환 타입이 없음.
    • 객체 초기화에 사용.
  4. 접근 제어자(Access Modifier):
    • 클래스 멤버(필드, 메서드)에 접근할 수 있는 범위를 정의.
    • 예) public, private, protected.
  5. 내부 클래스(Inner Class):
    • 클래스 내부에 선언된 클래스.

3. 클래스의 선언 방법

기본 구조:

[접근 제어자] class 클래스명 {
    // 필드
    [접근 제어자] 데이터타입 변수명;

    // 생성자
    [접근 제어자] 클래스명() {
        // 생성자 내용
    }

    // 메서드
    [접근 제어자] 반환타입 메서드명(매개변수) {
        // 메서드 내용
    }
}

예제:

public class Person {
    // 필드
    private String name;
    private int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 메서드
    public void introduce() {
        System.out.println("안녕하세요, 제 이름은 " + name + "이고, 나이는 " + age + "살입니다.");
    }
}

4. 객체 생성

객체 생성 방법:

클래스명 객체명 = new 클래스명([생성자 매개변수]);

예제:

public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Person person = new Person("홍길동", 25);

        // 메서드 호출
        person.introduce();
    }
}

출력 결과:

안녕하세요, 제 이름은 홍길동이고, 나이는 25살입니다.

5. 클래스의 특징

  1. 객체 지향의 핵심:
    • 클래스를 통해 객체를 생성하고, 이를 기반으로 프로그램을 설계.
  2. 캡슐화(Encapsulation):
    • 필드와 메서드를 하나로 묶고, 외부에서의 접근을 제한.
  3. 상속(Inheritance):
    • 기존 클래스를 확장하여 새로운 클래스를 생성.
  4. 다형성(Polymorphism):
    • 동일한 이름의 메서드가 다른 동작을 수행.
  5. 재사용성:
    • 클래스를 재사용하여 코드 중복을 줄임.

6. 클래스의 종류

  1. 일반 클래스: 기본 클래스.
    • 예) class MyClass { ... }
  2. 추상 클래스(Abstract Class):
    • 일부만 구현된 클래스. 직접 객체를 생성할 수 없음.
    • 예) abstract class AbstractClass { ... }
  3. 인터페이스(Interface):
    • 클래스가 구현해야 할 메서드 집합만 정의.
    • 예) interface MyInterface { ... }
  4. 내부 클래스(Inner Class):
    • 클래스 내부에 선언된 클래스.
    • 예) class Outer { class Inner { ... } }

7. 클래스의 접근 제어자

제어자 같은 클래스 같은 패키지 다른 패키지 (서브클래스) 다른 패키지
public 가능 가능 가능 가능
protected 가능 가능 가능 불가능
default(생략) 가능 가능 불가능 불가능
private 가능 불가능 불가능 불가능

8. 클래스의 장점

  1. 재사용성: 한 번 작성한 클래스를 다른 프로그램에서 재사용 가능.
  2. 유지보수 용이: 객체 단위로 분리되어 수정이 쉬움.
  3. 캡슐화: 데이터와 코드를 보호하며, 접근을 제어.
  4. 다형성: 동일한 이름의 메서드로 다양한 동작 수행.

9. 클래스와 객체의 차이

구분 클래스 객체
정의 객체를 생성하기 위한 설계도 클래스의 인스턴스 (실제 메모리에 생성된 실체)
메모리 메모리에 로드되지 않음 메모리에 로드되어 실제 데이터가 존재
선언 방식 class ClassName { ... } ClassName obj = new ClassName();
역할 속성과 동작(메서드)을 정의 정의된 속성과 동작을 실제로 사용

10. 예제: 클래스와 객체

public class Car {
    // 필드
    private String brand;
    private int speed;

    // 생성자
    public Car(String brand, int speed) {
        this.brand = brand;
        this.speed = speed;
    }

    // 메서드
    public void accelerate() {
        speed += 10;
        System.out.println(brand + " 속도가 " + speed + "km/h로 증가했습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Car car = new Car("BMW", 50);

        // 메서드 호출
        car.accelerate(); // BMW 속도가 60km/h로 증가했습니다.
    }
}

요약

  • 클래스: 객체의 설계도.
  • 구성 요소: 필드, 메서드, 생성자.
  • 특징: 캡슐화, 상속, 다형성.
  • 장점: 재사용성, 유지보수성, 코드 가독성.