Java 클래스 정리
1. 클래스의 정의
- 클래스(Class)는 객체를 생성하기 위한 청사진(Template) 또는 설계도입니다.
- 클래스는 속성(멤버 변수)과 동작(메서드)을 정의하며, 이들을 기반으로 객체를 생성합니다.
2. 클래스의 구성 요소
- 필드(Field): 객체의 속성을 나타내는 변수.
- 클래스 내부에 선언된 변수로, 객체의 데이터를 저장합니다.
- 예)
String name
, int age
.
- 메서드(Method): 객체가 수행할 동작(기능)을 정의.
- 특정 작업을 수행하는 코드 블록.
- 예)
void run()
, int getAge()
.
- 생성자(Constructor):
- 객체 생성 시 호출되는 특수한 메서드.
- 클래스와 이름이 같고 반환 타입이 없음.
- 객체 초기화에 사용.
- 접근 제어자(Access Modifier):
- 클래스 멤버(필드, 메서드)에 접근할 수 있는 범위를 정의.
- 예)
public
, private
, protected
.
- 내부 클래스(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. 클래스의 특징
- 객체 지향의 핵심:
- 클래스를 통해 객체를 생성하고, 이를 기반으로 프로그램을 설계.
- 캡슐화(Encapsulation):
- 필드와 메서드를 하나로 묶고, 외부에서의 접근을 제한.
- 상속(Inheritance):
- 기존 클래스를 확장하여 새로운 클래스를 생성.
- 다형성(Polymorphism):
- 재사용성:
6. 클래스의 종류
- 일반 클래스: 기본 클래스.
- 추상 클래스(Abstract Class):
- 일부만 구현된 클래스. 직접 객체를 생성할 수 없음.
- 예)
abstract class AbstractClass { ... }
- 인터페이스(Interface):
- 클래스가 구현해야 할 메서드 집합만 정의.
- 예)
interface MyInterface { ... }
- 내부 클래스(Inner Class):
- 클래스 내부에 선언된 클래스.
- 예)
class Outer { class Inner { ... } }
7. 클래스의 접근 제어자
제어자 |
같은 클래스 |
같은 패키지 |
다른 패키지 (서브클래스) |
다른 패키지 |
public |
가능 |
가능 |
가능 |
가능 |
protected |
가능 |
가능 |
가능 |
불가능 |
default (생략) |
가능 |
가능 |
불가능 |
불가능 |
private |
가능 |
불가능 |
불가능 |
불가능 |
8. 클래스의 장점
- 재사용성: 한 번 작성한 클래스를 다른 프로그램에서 재사용 가능.
- 유지보수 용이: 객체 단위로 분리되어 수정이 쉬움.
- 캡슐화: 데이터와 코드를 보호하며, 접근을 제어.
- 다형성: 동일한 이름의 메서드로 다양한 동작 수행.
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로 증가했습니다.
}
}
요약
- 클래스: 객체의 설계도.
- 구성 요소: 필드, 메서드, 생성자.
- 특징: 캡슐화, 상속, 다형성.
- 장점: 재사용성, 유지보수성, 코드 가독성.