클래스는 객체를 만들기 위한 설계도입니다. 클래스는 속성과 기능을 정의하며, 이를 바탕으로 객체가 생성됩니다.
필드(Field): 객체의 속성(변수)
메소드(Method): 객체의 동작(함수)
생성자(Constructor): 객체를 초기화하는 특수한 메소드
public class Car {
String color;
int speed;
void drive() {
System.out.println("자동차가 달립니다");
}
}
위 코드는 Car라는 이름의 클래스(설계도)를 정의한 것입니다.
객체는 클래스에 의해 만들어진 실체입니다. 클래스에 정의된 필드와 메소드를 실제로 사용할 수 있는 형태입니다. 객체는 메모리에 할당되며, 클래스의 구조를 기반으로 만들어집니다.
Car myCar = new Car();
myCar는 Car 클래스의 객체입니다.
myCar는 color, speed라는 필드와 drive()라는 메소드를 사용할 수 있습니다.
인스턴스는 객체와 거의 동일한 의미로 사용되며, 객체가 클래스를 기반으로 메모리에 생성되었을 때의 구체적인 실체를 의미합니다.
객체와 인스턴스의 차이점은 문맥에 따라 구분되며 실질적으로 같은 것을 가리키는 경우가 많습니다.
“객체”는 좀 더 추상적인 개념
“인스턴스”는 특정 클래스로부터 생성된 실체라는 점을 강조할 때 사용
예시:
Car car1 = new Car(); // Car 클래스의 인스턴스
Car car2 = new Car(); // 또 다른 인스턴스
car1과 car2는 Car 클래스의 서로 다른 인스턴스(객체)
각각 독립적인 상태를 가짐
용어 |
설명 |
---|---|
클래스 |
객체의 설계도, 틀 |
객체 |
클래스에 따라 생성된 실체 |
인스턴스 |
특정 클래스에 의해 메모리에 만들어진 객체 |
비유:
클래스 = 붕어빵 틀
객체/인스턴스 = 붕어빵
public class Person {
String name;
int age;
void introduce() {
System.out.println("안녕하세요, 제 이름은 " + name + "입니다.");
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person(); // 인스턴스 생성
p1.name = "홍길동";
p1.age = 25;
p1.introduce();
}
}
출력 결과:
안녕하세요, 제 이름은 홍길동입니다.
new는 클래스의 인스턴스를 생성하는 연산자입니다.
Car myCar = new Car();
new Car() → Car 클래스의 인스턴스를 메모리에 생성
myCar는 생성된 객체를 참조하는 변수
Car car1 = new Car();
Car car2 = new Car();
car1.color = "빨강";
car2.color = "파랑";
System.out.println(car1.color); // 빨강
System.out.println(car2.color); // 파랑
각 객체는 독립적인 메모리 공간을 가지며, 서로 영향을 주지 않습니다.
구분 |
설명 |
---|---|
클래스 |
객체의 설계도, 데이터와 기능 정의 |
객체 |
클래스 기반으로 생성된 메모리 상의 실체 |
인스턴스 |
특정 클래스에서 생성된 객체 |
클래스는 설계도이며, 객체 또는 인스턴스는 이 설계도를 기반으로 메모리에 생성된 실체입니다.
객체와 인스턴스는 자주 혼용되며, 문맥에 따라 강조점이 다를 뿐 큰 차이는 없습니다.