다음을 참고하여 작성되었습니다. 감사드립니다. 🙇🏻♂️
- 인스턴스를 생성할 때 지정
- 클래스와 동일한 이름의 메소드를 호출하도록 약속되어 있음
- 클래스가 인스턴스화 될 때 실행되어야 할 코드를 생성자 안에 정의하는 것을 통해 초기화 가능
- 클래스가 인스턴스화 될 때 구분자를 통해 매개변수를 생성자의 인자로 넘겨받는다.
- 생성자에 지정된 매개변수는 new() 연산자를 통해 해당 클래스의 인스턴스 변수로 대입된다.
- 생성자는 static, return 데이터 타입을 지정하지 않는다. 오로지 자신의 클래스 타입만 지정된다.
- 생성자 자신의 클래스에서 인스턴스 변수가 지정되지 않으면 아무것도 실행되지 않는다. 그렇기 때문에 this를 사용한다.
- this는 클래스 자신의 인스턴스를 가리킨다.
- this.equals(자신의 인스턴스 변수), = 연산자에 대입되는 변수.equals(생성자를 통해 주입되는 매개변수)
public class A {
private 데이터타입 instance;
private 데이터타입 instance;
public A (데이터타입 parameter) {
this.instance = parameter;
}
public class B {
private B instance;
public B ( A parameter ) {
this.instance = parameter;
}
}
"과연 누가 외부 객체를 초기화 해야할까?" 라는 고민을 마주치게 된다.
public class Application {
public static void main(String[] args) {
A a = new A(parameter);
B b = new B(parameter);
}
}
- 클래스와 동일한 이름의 메소드를 호출하도록 약속되어있는 생성자가 존재한다.
- 생성자에 지정된 매개변수는 new() 연산자를 통해 해당 클래스의 인스턴스 변수로 대입된다.
- 외부에서 사용할 객체를 전달받을 수 있는 생성자를 추가하는 방법을 활용하면
- 객체는 필요한 객체를 스스로 생성하거나 찾지 않고 외부에서 넣어주는 방식으로 해결할 수 있다. (이것을 의존성 주입이라고 한다.)
부모에게 상속받거나 new() 연산자를 통해서만 다른 객체의 협력과 제어의 흐름이 가능한 것인줄만 알았던 것 같다..
2까지의 사실들을 응용하면 어떻게 될까?
public interface InterfaceA {
featureA();
...
}
public class implementationA implements InterfaceA {
@Override
featureA(){
...
}
}
public interface InterfaceB {
featureB();
...
}
public class implementationB implements InterfaceB{
@Override
featureB(){
...
}
}
public class AppConfig {
public InterfaceA interfaceA() {
return new implementationA(new implementationB());
}
}