본문 바로가기
멘토씨리즈 자바/예제

[응용문제] 생성자

by Hwanii_ 2023. 5. 21.
728x90

SECTION 09 - 생성자

244 ~ 245 page.

 

1. 다음 빈칸에 알맞은 단어를 작성해 보세요.

 

클래스의 이름과 동일하고 반환 타입이 없는 특별한 메서드를 (_____) (이)라고 합니다.

 

=> 생성자

 

2. 다음 문장이 맞으면 O표, 틀리면 X표 하세요.

 

1) 생성자를 호출 할 때는 반드시 new 키워드를 사용해야 합니다. (___)

 

2) 매개변수가 1개인 생성자를 기본 생성자라고 부릅니다. (___)

 

3) 생성자를 코드로 명시하지 않으면 기본 생성자는 생략되어 있습니다. (___)

 

=>

 

1) O

2) X

3) O

 

2) 매개변수가 0개인 생성자를 기본 생성자라고 부른다.

 

3. 다음 코드를 실행했을 때 콘솔창에 출력되는 결과는 무엇입니까 ?

class Computer {
	String brand;
    
    Computer(String name) {
    	brand = name;
    }
    void logo() {
    	sysout("사랑해요 " + brand);
    }
}

main()

Computer computer = new Computer("삼송");
computer.logo();

 

=> 

사랑해요 삼송

 

4. 위 3번 코드에서 Computer 클래스의 brand 필드명을 name으로 변경하면,

다음 빈칸에 들어갈 코드는 무엇입니까 ?

class Computer {
	String name;
    
    Computer(String name) {
    ->	___________________________________
    }

 

=> this.name = name;

 

멤버변수 String brand를 name으로 변경하면,

this.name = name; 으로 해야지만 매개변수가 값을 잘 받아서

인스턴스변수인 this.name에 값을 복사(저장) 하게 된다.

 

그냥 name = name 으로 쓰면, 컴퓨터는 name이 인스턴스변수라고 생각을 하지 못하고

가장 가까운 name 으로 인식 하게 된다.

즉, 생성자의 지역변수 name으로 인식 하게 된다.

 

노란 밑줄

 

 

Console

그래서 이렇게 뜨게 된다.

 

따라서, this를 붙혀줘서 이 name이라는 변수가 확실하게 인스턴스 변수임을 인지하게 해주고,

 

결과는 이렇게 잘 나오는것을 확인 할 수 있다.

 

Console

 

5. 다음 코드는 컴파일 에러가 발생합니다. 그 이유는 무엇이며, 어떻게 해결해야 할까요 ?

class Book {
   	 String title;
	 int pages;
    
    Book(String title,int pages) {
    	this.title = title;
        this.pages = pages;
    }
}

main()

Book b1 = new Book("어린왕자",300);
Book b2 = new Book();

 

=> 

b2의 객체를 생성했을 때, 매개변수가 없는 생성자를 호출 한다.

하지만, 현재 Book 클래스 내부에는 매개변수 2개짜리 생성자가 있기 때문에

매개변수 0개짜리 생성자가 존재하지 않아서 에러가 뜨게 된다.

즉, 매개변수 0개짜리 생성자를 만들어 줘야 한다.

 

this("책이름",100);

 

 

이렇게 표현해 줘도 괜찮지만, 아래의 매개변수 2개짜리 생성자랑 코드가 겹치기 때문에

코드의 중복을 피하기 위해서 this()를 사용해서 표현 한다.

 

반응형

'멘토씨리즈 자바 > 예제' 카테고리의 다른 글

[응용문제] 다형성과 타입 변환  (0) 2023.05.22
[응용문제] 상속  (0) 2023.05.21
[응용문제] 메서드  (0) 2023.05.21
[응용문제] 클래스  (0) 2023.05.21
[응용문제] 배열  (0) 2023.05.21