퀴즈 7번에 관하여 질문있습니다!
258
작성한 질문수 1
안녕하세요! 정말 감사한 마음으로 강의 수강 중인 대학생입니다
퀴즈 7번에 관해서 2가지 질문있습니다.
처음에 아래와 같이 System.out.println(this.name + "를 만듭니다. "); 를 cook 메소드에 넣지 않고 HamBurger 메소드에 넣어서 틀렸습니다. 이외에 모든 코드는 선생님것과 동일합니다
class HamBurger{
public String name;
HamBurger() { //생성자
this("햄버거");
System.out.println(this.name + "를 만듭니다. ");
}
HamBurger(String name) { //매개변수를 받는 생성자
this.name = name;
}
void cook(){
System.out.println("빵 사이에 들어가는 재료는?");
System.out.println("> 양상추 ");
System.out.println("+ 패티 ");
System.out.println("+ 피클 ");
}
}왜 HamBurger()에 system.out.println(this.name + "를 만듭니다. ");를 작성하면 안되나요?
혹시 그 이유가 생성자와 void메소드는 반환값이 없다고 했는데요,
제가 작성한 HamBurger()는 System.out.println(this.name + "를 만듭니다. ");라는 반환값을 만든 것이기 때문인가요?
그러면 cook 메소드는 void가 있는데 값을 반환하는 것은 어찌된 것일까요.... 모르겠습니다 흑흑
2. public class Quiz07 에서 cook만 호출했기 때문에 Hamburger메소드에 작성한 System.out.println(this.name + "를 만듭니다. ");가 뜨면 안된다고 생각했는데
햄버거를 만듭니다.
주문하신 메뉴를 만듭니다.
-------------------
빵 사이에 들어가는 재료는?
> 양상추
+ 패티
+ 피클
..."햄버거를 만듭니다" 가 for반복문이 실행되기도 전에 처음에 한번 떴습니다. 호출하지 않았는데 왜 출력된건가요??
도와주세요!!
답변 1
0
안녕하세요?
먼저 이 정도로 훌륭하게 퀴즈를 잘 풀어보셨다는 점에 대해 큰 격려의 박수를 드립니다 🙌
너무나 잘 해주셨어요 😍
궁금한 점에 대해 답변을 드려볼게요.
생성자는 클래스로부터 객체가 만들어질 때 자동으로 실행이 되는 부분입니다.
바로 이 부분인데요.
hamBurgers[0] = new HamBurger();그래서 HamBurger 생성자 안에 println() 출력구문을 두게 되면 위 코드가 실행될 때 HamBurger() 에 의해서 매개변수를 받지 않는 기본 생성자가 호출되어 println() 의 내용도 출력되는 것입니다.
퀴즈에서는 각 버거를 만들 때 "~를 만듭니다." 문장에 출력되길 원했기 때문에 cook() { } 메소드에 위 문장이 들어가는 게 더 좋은 접근입니다.
어쩌면 매개변수를 받는 생성자에 출력구문을 넣어볼 수도 있을텐데요.
HamBurger(String name) { //매개변수를 받는 생성자
this.name = name;
System.out.println(this.name + "를 만듭니다. ");
}이렇게 하게 되면 치즈버거나 새우버거 또한 super(name) 를 통해 위 생성자를 이용하게 되는데 이렇게 하는 경우라면 햄버거 객체를 하나 생성하고 cook() 메소드를 호출하고, 치즈버거 객체를 하나 생성하고 cook() 메소드를 호출하고, 이런 식으로 각각 생성과 호출을 반복해줘야 원하는 결과를 얻을 수 있습니다. 그러면 반복문을 활용할 수 없기 때문에 코드가 많이 길어지는 문제가 생길 수 있어요.
(각각 생성과 호출을 반복한 코드)
HamBurger[] hamBurgers = new HamBurger[3];
System.out.println("주문하신 메뉴를 만듭니다.");
System.out.println("-------------");
hamBurgers[0] = new HamBurger(); // 생성
hamBurgers[0].cook(); //호출
System.out.println("-------------");
hamBurgers[1] = new CheeseBurger(); // 생성
hamBurgers[1].cook(); // 호출
System.out.println("-------------");
hamBurgers[2] = new ShrimpBurger(); // 생성
hamBurgers[2].cook(); // 호출
System.out.println("-------------");
System.out.println("메뉴 준비가 완료되었습니다.");또한 위처럼 생성과 호출을 반복하지 않으면 이렇게 한번에 모든 내용이 출력되어 원하는 결과를 얻을 수 없게 됩니다.
(실행결과)
햄버거를 만듭니다.
치즈버거를 만듭니다.
새우버거를 만듭니다.
주문하신 메뉴를 만듭니다.
-------------
... 생략 ...질문주신 것처럼 반환값 존재 여부와는 관련이 없습니다. 다만 생성자의 호출 시점에 따른 문제에요. 객체 생성과 동시에 실행되어야 하는 구문이라면 생성자에 넣는 게 맞지만, 생성을 하고 나서 나중에 어딘가에서 실행되어야 하는 구문이라면 생성자에 넣지 않는 게 맞습니다.
그리고 반환형에 void 라고 적혀 있으면 반환값이 없는 메소드에요. cook 메소드 또한 void 로 정의되었으므로 별다른 값을 반환하지 않는다는 점 주의해주세요!
public void cook() {
...
}궁금증 해결에 도움되길 바라겠습니다 😊
감사합니다.
자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?
1
146
2
static이 뭐였는지 기억이 안나요 ㅜㅜ
0
119
2
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
0
70
1
사고력 키우는 법이 어떤게 있나요?
0
93
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
186
3
JDK 버전 문의
0
129
2
BlackBox 파일 내에서 메소드 정의
0
136
1
동기화
0
121
2
Iterator 문의
0
105
1
코드 순서 문의
0
142
1
클래스 메소드
0
149
2
Quiz_05 관련 질문드립니다 !
0
118
2
다운로드가 안됩니다
0
165
2
다형성
0
120
2
HashMap
0
80
2





