객체를 생성하는 역할을 하는 클래스의 구성요소
인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
오버로딩이 가능
생성자와 메서드의 차이
클래스명(매개변수) { //생성자 기본 구조
..
}
Constructor constructor1 = new Constructor();
Constructor constructor1 = new Constructor("Hi");
Constructor constructor1 = new Constructor(1,2);
class Constructor {
Constructor() { //생성자 오버로딩
System.out.println("1번");
}
Constructor(Sring str) { //생성자 오버로딩
System.out.println("2번");
}
Constructor(int a, intb) { //생성자 오버로딩
System.out.println("3번");
}
- 기본 생성자
모든 클래스에는 반드시 하나 이상의 생성자가 존재
(자바 컴파일러가 매개변수가 없는 기본 생성자를 자동으로 추가)
클래스명(){}
- 매개변수가 있는 생성자
호출 시에 해당 값을 받아 인스턴스를 초기화
Car bmw = nwe Car("Model a", "파란색"); //매개변수로 초기화
System.out.println("내 차는 " +bmw.getModelName() + "이고, 색은 " + bmw.getColor() + "이다.");
class Car {
private String modelName;
private String color;
public Car(String modelName, String color){
this.modelName = modelName; //this 키워드로 인스턴스 변수 구분
this.color = color;
}
public String getModelName(){
return modelName;
}
public String getColor(){
return color;
}
// 출력
내 차는 Model a이고, 색은 파란색입니다.
- this()
자신이 속한 클래스에서 다른 생성자를 호출하는 경우
this()
메서드는 반드시 생성자의 내부에서만 사용this()
메서드는 반드시 생성자의 첫 줄에 위치
class Example {
public Example() {
System.out.println("기본 생성자 호출");
};
public Example(int x) {
this(); //다른 생성자 호출
System.out.println("두 번째 생성자 호출");
}
}
//출력
기본 생성자 호출
기본 생성자 호출
두 번째 생성자 호출
- this
인스턴스 자신을 가리키며 인스턴스 자신의 변수에 접근
인스턴스의 필드명과 지역변수를 구분하기 위한 용도
(위의 Car 예제 참고)
class Outer { // 외부 클래스
class Inner {
// 인스턴스 내부 클래스
}
static class StaticInner {
// 정적 내부 클래스
}
void run() {
class LocalInner {
//지역 내부 클래스
}
}
}
- 인스턴스 내부 클래스
객체 내부에 멤버의 형태로 존재
외부 클래스의 모든 접근 지정자의 멤버에 접근 가능
정적 변수와 정적 메서드는 인스턴스 내부 클래스에서 선언x
- 정적 내부 클래스
내부 클래스가 외부 클래스의 존재와 무관하게 정적 변수를 사용
- 지역 내부 클래스
메서드 내에서 정의되는 클래스
메서드 안에서 선언 후에 바로 객체를 생성해서 사용
class A{
int m;
int n;
void init(int m, int n) {
// 필드에 존재하는 m,n 값에 대입
this.m = m;
this.n = n;
}
}
public class Class_cons {
public static void main(String[] args) {
// 필드명과 지역 변수명이 같고, this 키워드를 사용.
A b = new A();
b.init(3, 5);
System.out.println(b.m); // 3
System.out.println(b.n); // 5
}
}
객체지향 개념이 어려워서 아직은 잘 모르겠다. 추가 공부를 해서 더 알아가야 될 것같다.