인프런 커뮤니티 질문&답변

andy15948님의 프로필 이미지
andy15948

작성한 질문수

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

Chap7 퀴즈

해결된 질문

작성

·

123

·

수정됨

0

안녕하세요! 7강 마무리 퀴즈를 스스로 풀어보며 의문점이 생겨 질문 남깁니다.

저는 이런식으로 name 변수를 선언하고 cook() 메소드에 this.name을 활용했는데, 강의에선 기본 생성자와 name을 매개변수로 하는 생성자를 정의하고 풀어 주셨더라구요! 결과는 같게 나오지만 혹시 생성자를 사용하는게 더 좋은 코딩 방법인지, 제가 한 방식이 결과는 맞지만 논리적 오류가 있는지 궁금합니다.

그리고 강의 잘 듣고 있습니다. 감사합니다!

답변 1

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

퀴즈에 정답은 없으며 충분히 훌륭하게 잘 풀어주셨습니다.
작성하신 코드로도 퀴즈에서 원하는 요건은 충족하니까요 😍

첨언 드리자면 cook() 이라는 메소드는 그 이름에 맞게 '요리'만 하는 동작으로 사용이 되면 좋습니다. Hamburger 클래스의 경우 cook() 메소드는 요리하는 동작만 있지만 CheeseBurger 의 경우 첫 번째 줄에

this.name = "치즈버거"; 

와 같이 '요리' 동작에 더하여 이름을 설정하는 부분도 추가로 들어가고 있지요. 그래서 이름을 설정하는 부분은 다음과 같이 각 클래스에 setName() 이라는 메소드를 별도로 분리하는 방법도 생각해볼 수 있습니다.

public void setName(String name) {
    this.name = name;
}

그러면 메인 메소드의 동작은 조금 달라져야겠네요.

HamBurger[] hamBurgers = new HamBurger[3];

hamBurgers[0] = new HamBurger();
hamBurgers[0].setName("햄버거"); // 이름 설정

hamBurgers[1] = new CheeseBurger();
hamBurgers[1].setName("치즈버거"); // 이름 설정

이 작업을 보다 수월하게 하기 위해 저는 퀴즈 풀이에서 객체를 생성하면서 동시에 이름을 만들도록 하였습니다. 그리고 각 버거 클래스의 이름은 어차피 정해져 있기 때문에 클래스 내에서 값을 고정해도 괜찮은 상황인거죠.
또한 다음과 같이 혹시 모를 실수로 이름을 잘못 설정하는 일도 방지할 수 있을 것 같아요.

hamBurgers[1] = new CheeseBurger();
hamBurgers[1].setName("새우버거"); // 잘못된 이름 설정

궁금하신 내용에 답변이 되었으면 좋겠습니다.
다시 말씀드리지만 작성하신 코드도 매우 훌륭하게 잘 풀어주셨어요😊

감사합니다.

andy15948님의 프로필 이미지
andy15948

작성한 질문수

질문하기