생성자(Constructor)는 객체를 생성하고 초기화하기 위해 사용되는 특수한 메소드입니다. 반면 일반 메소드(Method)는 특정 문장이나 로직을 실행하는 역할을 담당합니다. 두 개념은 이름만 들으면 비슷해 보이지만, 용도와 동작 방식에서 뚜렷한 차이가 있습니다.
아래 표는 자바에서 생성자와 메소드의 핵심적인 차이점을 정리한 것입니다.
| 번호 | 구분 기준 | 생성자(Constructor) | 메소드(Method) |
|---|---|---|---|
| 1 | 목적 | 객체를 생성하고 초기화하는 데 사용됩니다. | 특정 문장이나 작업을 실행하는 데 사용됩니다. |
| 2 | 호출 주체 | 시스템에 의해 암묵적으로(자동으로) 호출됩니다. | 프로그램 코드 내에서 명시적으로 호출해야 합니다. |
| 3 | 호출 시점 | new 키워드로 객체를 생성할 때 호출됩니다. | 코드에서 해당 메소드를 호출할 때 실행됩니다. |
| 4 | 반환 타입 | 반환 타입을 가질 수 없습니다. | 반환 타입을 가질 수 있습니다(void 포함). |
| 5 | 객체 관계 | 아직 존재하지 않는 객체를 초기화합니다. | 이미 존재하는 객체를 통해서만 호출할 수 있습니다. |
| 6 | 이름 규칙 | 클래스 이름과 반드시 동일해야 합니다. | 클래스 이름과 같은 이름을 사용할 수 없습니다. |
| 7 | 상속 | 하위 클래스(서브클래스)에 상속되지 않습니다. | 하위 클래스에 상속됩니다. |
생성자 vs 메소드 예제 코드
다음 예제는 생성자와 메소드가 각각 어떻게 호출되고 동작하는지 보여줍니다. 객체를 생성하는 순간 생성자가 자동으로 실행되고, 이후 init() 메소드를 명시적으로 호출하면 메소드가 실행되는 것을 확인할 수 있습니다.
JavaTester.java
public class JavaTester {
int num;
JavaTester(){
num = 3;
System.out.println("Constructor invoked. num: " + num);
}
public void init(){
num = 5;
System.out.println("Method invoked. num: " + num);
}
public static void main(String args[]) {
JavaTester tester = new JavaTester();
tester.init();
}
}실행 결과
Constructor invoked. num: 3 Method invoked. num: 5
위 출력 결과에서 알 수 있듯이, new JavaTester()로 객체를 생성하는 순간 생성자가 먼저 실행되어 num이 3으로 초기화됩니다. 그다음 tester.init()을 직접 호출했을 때 메소드가 실행되며 num 값이 5로 변경됩니다. 이처럼 생성자는 객체 생성 시점에 자동으로 동작하고, 메소드는 필요할 때마다 명시적으로 호출하여 사용한다는 점이 가장 큰 차이입니다.