inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

나도코딩의 자바 기본편 - 풀코스 (20시간)

생성자에 대하여..

해결된 질문

333

liltjay

작성한 질문수 25

0

안녕하세요 생성자를 공부 하던 중 궁금한게 생겨서 질문 드립니다!! ^^
생성자를 정의하는 방법이 헷갈려서 질문 드립니다!

1.클래스와 같은 이름을 가진 메소드를 만드는 것이 생성자를 만드는 방법이라고 할 수 있는건가요? (2.그리고 class Calculator는 Calculator라는 클래스를 만드는 것이고, public Calculator는 메소드 오버로딩처럼 이미 만들어진 Calculator 클래스를 수정하는건가요?)

package chap_07;
    class Calculator {
        int left, right;

        public Calculator(int left, int right) {
            this.left = left;
            this.right = right;
        }

        public void sum() {
            System.out.println(this.left + this.right);
        }
    }

3.위 코드에서 class Calculator 로 클래스를 만들고 이후 public Calculator 로 클래스와 같은 이름인 메소드를 만듬으로써, calculator 클래스를 열면 바로 int left,right를 입력하도록 하는 생성자를 만든 것인가요?

public class CalculatorDemo1 {
    public static void main(String[] args) {
        Calculator c1 = new Calculator(); // 에러 발생
        c1.sum();

4.그리고 Calculator() 괄호 안에 아무것도 입력하지 않으면 오류가 생기는 것을 미루어 보아
새로운 인스턴스를 만들 때 생성자가 작동하는 것이 맞나요?

감사합니다.

 

 

 

객체지향 oop java

답변 1

1

나도코딩

안녕하세요?

1. 맞습니다.
클래스와 같은 이름을 가진 메소드를 만드는 것이 생성자를 만드는 방법입니다. 이때 반환형(ex: void, int 등)은 작성하지 않습니다.

2. 맞습니다.
class Calculator { ... } 는 Calculator 라는 클래스를 정의하는 것입니다.
public Calculator( ... ) { ... } 는 Calculator 라는 클래스의 생성자를 정의하는 것입니다.
이때, Calculator 생성자를 개발자가 직접 정의하지 않으면 자동으로 Default 생성자가 만들어지며 Default 생성자는 아무런 전달값을 받지 않는 형태의 생성자입니다. 하지만 클래스 내에서 public Calculator(int left, int right) { ... } 와 같은 생성자를 정의하게 되면 Default 생성자는 만들어지지 않습니다.

3. 맞습니다.

public Calculator(int left, int right) {
    this.left = left;
    this.right = right;
}

위 코드를 정의함으로써 Calculator 클래스로부터 어떤 객체를 만들 때 인스턴스 변수인 left, right 는 전달받은 값으로 설정됩니다.

4. 아래와 같이 답변 드립니다.
새로운 인스턴스를 만들 때 생성자가 호출되는 것은 맞습니다. 단, 위에서 작성한 2번의 설명에 의해 다음과 같이 생성자를 정의하였으므로 Default 생성자가 만들어지지 않습니다.

public Calculator(int left, int right) {
    this.left = left;
    this.right = right;
}

그러므로 new Calculator() 를 하게 되면 아무런 전달값을 받지 않는 Default 생성자가 없기 때문에 오류가 나는 것이며, 이때는 다음과 같이 Default 생성자를 만들거나 또는 left, right 에 해당하는 전달값을 보내줌으로써 오류를 해결할 수 있습니다.

public Calculator() { } // Default 생성자 추가

public Calculator(int left, int right) {
    this.left = left;
    this.right = right;
}

감사합니다 😊

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

146

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

119

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

72

1

사고력 키우는 법이 어떤게 있나요?

0

94

2

getter setter

0

103

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

80

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

76

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

117

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

187

3

JDK 버전 문의

0

130

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

123

2

Iterator 문의

0

105

1

코드 순서 문의

0

143

1

클래스 메소드

0

150

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

120

2

HashMap

0

81

2