메서드 안의 생성자에 객체 생성 시 오류 발생

728x90

생성자 안의 객체 생성 시 컴파일 오류 

강사님이 Calculator라는 클래스를 정의할 때 클래스 안의 다른 2개의 클래스들을 다른 클래스에서도 선언하기 위해 그 클래스들의 객체를 필드 값에 정의한 내용이다.

 

이때 나의 질문 내용은 필드값에 객체를 한번에 선언하여 Calculator 라는 클래스를 통해 다른 클래스의 메서드들을 접근하는 것과 생성자에 객체의 주소값을 별도로 메모리에 할당하는 것의 차이점을 여쭤보는것이었다.

 

강사님은 두개에 별다른 차이점은 없고 컴파일 시 오류가 나지 않지만, 자바 안의 생성자의 목적(값을 초기화) 에 맞게 별개로 객체를 정의하여 생성자에 별도로 정의하는 것이 좋다고 하셨다.

 

아래는 질문을 드릴 때 사용되었던 코드.

 

Calculator를 실행시키기 위해 사용되었던 Main Class

package Calculator;

public class CalculatorMain {
	public static void main(String[] args) {
		Calculator ca = new Calculator();
		int result = ca.subTwoNumber(3, 5);
		System.out.println(result);
	}
}

 

Calculator의 메서드들과 생성자가 들어있는 클래스들

package Calculator;

public class Calculator {
//	원하는 클래스의 객체를 선언하여	(참조자료형 - 주소로 참조하여 접근하는 방식)
//	참조변수를 선언하여 주소값으로 관리하는 방식이 객체지향 관리 방식
	Adder adder;
	Subtractor subtractor;
	
	public Calculator() {
//		생성자안에 객체를 선언하면 오류가 나는 이유는 생성자 실행이 끝나면 메모리가 소멸됨
//		따라서 필드에 참조변수를 선언하고 생성자에 메모리 할당하여 값 초기화를 목적으로 객체를 별개로 정의하자
//		생성자를 염두하면서 값을 초기화하여 생성자의 취지에 부합하게 정의하자
//		필드 값의 객체 생성도 상관은 없음
		adder = new Adder();
		subtractor = new Subtractor();
	}
//	아래처럼 원하는 기능의 메서드를 작성하여 호출
class Adder{
	private int cntAdd;
	
	Adder(){
		cntAdd = 0;
	}
	int addTwoNumber(int n1, int n2) {
		cntAdd++;
		return n1+n2;
	}
	public int getCntAdd() {
		return cntAdd;
	}
	public void setCntAdd(int cntAdd) {
		this.cntAdd = cntAdd;
	}
}
class Subtractor{
	private int cntSub;
	Subtractor() {
		this.cntSub = 0;
	}
	int subTwoNumber(int n1, int n2) {
		cntSub++;
		return n1-n2;
	}
	int getCntSub() {
		return cntSub;
	}
}
728x90