Programming-[Backend]/Java

[TIL] 생성자 내부 멤버 메서드 실행(생성자 안에서 메서드 실행)

컴퓨터 탐험가 찰리 2022. 3. 7. 21:37
728x90
반응형

 

 

1. 배경

 

생성자 내부에서 메서드를 실행할려고 했다. 아래와 같은 코드이다.

 

public MessageQueueAccessor(String name) {
  super();
  this.name = name;
}


public MessageQueueAccessor(String name, String url) {
    super();
    this.name = name;
    this.url = url;

    this.sendMessage();
   
   
    //중략
    
    private void sendMessage() {
    	//로직
    }
        
}

 

즉 name, url을 인자로 받는 특정 생성자를 통해 인스턴스를 생성하는 경우 필드값을 초기화할 뿐 아니라, 멤버 메서드인 sendMessage 로직도 실행하고자 했다.

 

그런데 역할상 생성자가 초기화에만 관여해야지, 어떤 로직을 실행하는 역할을 해도 될까? 라는 의문이 들었다.

 


 

2. 결론

 

결론은 사용해도 된다. 다만 참조1에 따르면, 아래 규칙을 지켜야한다.

 


  1. 생성자에서만 사용하는 메서드라면 private 처리를 하여 다른 곳에서는 Override하여 사용할 수 없도록 해야한다.
  2. 생성자 외 다른 곳에서도 사용한다면 final 처리를 하여 재할당이 불가하도록 해야한다.
  3. 멤버 변수와 관련된 로직이 들어간 메서드라면 에러가 날 수 있다.

 

2. 관련, final void sendMessage() {... }와 같은 형식으로 사용한다.

 

3. 관련, 생성자를 통해 인스턴스가 초기화되기 전인데 메서드에서 멤버 변수를 사용해버리면 변수값이 제대로 설정되지 않는 에러가 발생할 수도 있으니 사용을 자제하는 편이 좋다.

 

 


참조

 

1) 스택 오버 플로우 - Can I call methods in constructor in Java?

https://stackoverflow.com/questions/5230565/can-i-call-methods-in-constructor-in-java

 

 

 

 

728x90
반응형