클래스(class)란?
- Java에서 객체를 정의하는 틀 또는 설계도
- 구성
- 필드(field)
- 객체의 상태
- 클래스에 포함된 변수
- 메소드(method)
- 객체의 행동
- 어떠한 특정 작업을 수행하기 위한 명령문의 집합
- 필드(field)
인스턴스(instance)란?
- 선언된 해당 클래스 타입의 객체
- 메모리에 할당된 객체
- 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있다.
- 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다.
- 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 된다.
클래스의 인스턴스화란?
- 클래스로부터 객체를 선언하는 과정
- Java에서 클래스를 사용하기 위해서는 해당 클래스 타입의 객체를 선언해야 한다.
클래스 정의 방법
접근제어자 class 클래스이름 {
접근제어자 필드1의타입 필드1의이름;
접근제어자 필드2의타입 필드2의이름;
...
접근제어자 메소드1의 원형
접근제어자 메소드2의 원형
...
};
인스턴스의 생성 방법
//원형
객체참조변수이름 = new 클래스이름();
//예시
Car myCar = new Car();
생성자(constructor)란?
- 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 메소드
- Java에서 생성자(constructor)의 이름은 해당 클래스의 이름과 같아야 한다.
- 특징
- 생성자는 반환값이 없지만 반환 타입을 void형으로 선언하지 않는다.
- 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.
- 객체를 초기화하는 방법이 여러 개 존재할 경우에는
하나의 클래스가 여러 개의 생성자를 가질 수 있다.- 생성자도 메소드이기 때문에 메소드 오버로딩이 가능하다.
- 사용 예시
//매개변수가 없는 생성자 선언
클래스이름() {
//초기화 내용
}
//매개변수가 있는 생성자 선언
클래스이름(인수1, 인수2, ...) {
//초기화 내용
}
//예시
class Car {
private String name;
Car(){
this.name = "미출시";
System.out.println(name);
}
Car(String name){
this.name = name;
System.out.println(name);
}
}
Car temp1 = new Car(); //출력 : 미출시
Car temp2 = new Car("람보르기니"); //출력 : 람보르기니
클래스를 가지고 객체를 생성하면 해당 객체는 메모리에 즉시 생성된다.
이렇게 생성된 객체는 모든 인스턴스 변수가 아직 초기화되지 않은 상태다.
this 참조 변수
- 인스턴스가 바로 자기 자신을 참조하는 데 사용하는 변수
- 해당 인스턴스의 주소를 가리킨다.
- 사용 예시
class Car {
private String name;
Car(){
this.name = "미출시";
System.out.println(name);
}
Car(String name){
this.name = name;
System.out.println(name);
}
}
Car temp1 = new Car(); //출력 : 미출시
Car temp2 = new Car("람보르기니"); //출력 : 람보르기니
this() 메소드
- 생성자 내부에서만 사용할 수 있는 메소드
- 같은 클래스의 다른 생성자를 호출할 때 사용한다.
- 인수를 전달해서 사용하면 생성자 중에서 메소드 시그니처가 일치하는 다른 생성자를 찾아 호출한다.
- 사용 예시
class Car {
private String name;
Car(){
this("람보르기니");
}
Car(String name){
this.name = name;
System.out.println(name);
}
}
Car temp = new Car("람보르기니"); //출력 : 람보르기니