• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

퀴즈#10에 질문 있습니다.

23.06.30 09:49 작성 조회수 271

0

 

안녕하세요.

현재 직장과 병행하며 수업을 듣고 있는 수강생입니다. 열심히 듣고는 있지만 아직 개념이 완벽하게 잡히지 않아서 그런지, 혼자 코딩해야 하는 퀴즈가 어렵다고 느껴집니다. 제가 해본 결과는 아래와 같습니다.

public class quiz_10 { 
    public static void main(String[] args) {
        Customer ages = new Customer();
        Object[][] age = {{"james",ages.james}, {"benjamin",ages.benjamin}, {"chandler",ages.chandler},
                {"rachel",ages.rachel}, {"monica",ages.monica}};

        System.out.println("미술관 입장료");
        System.out.println("-----------------");
        Arrays.stream(age).map(x -> (int) x[1] > 20 ? x[0] + " 5000원" : x[0] + " 무료").forEach(System.out::println);
    }
};

class Customer {
    public int chandler = 50;
    public int rachel = 42;
    public int monica = 21;
    public int benjamin = 18;
    public int james = 5;

};

결과는 같지만 방식은 나도코딩님과 많이 달라서 이렇게 해도 되는 건지, 사고방식을 다르게 할 수 있는 방법을 찾아봐야 하는 건지 걱정이 됩니다😂

제가 너무 어렵게 공부하고 있는 걸까요?

충고 부탁 드립니다. 감사합니다!

답변 1

답변을 작성해보세요.

0

안녕하세요?

직장 생활을 하시면서 바쁜 와중에 자기 계발을 위해 자바를 공부하시는 모습에 먼저 큰 경의를 표합니다. 정말 대단하신 거에요! 반드시 지금 투자하시는 시간과 노력이 머지 않아 큰 보람으로 다가오리라 믿습니다 :)

프로그래밍 공부를 처음 하신다는 가정 하에 지금의 퀴즈 풀이는 굉장히 훌륭한 접근입니다. 이렇게도 해보고 저렇게도 해보고 머릿 속으로 혼자 구상하시며 끝내 해결을 하셨으니까요. 이런 과정들이 모이고 모여서 점점 더 좋은 코드를 만드시게 될 거에요. 그렇기 때문에 당장 강의에서 제공되는 해설과 다르다고 하여 실망하시거나 좌절하실 필요는 절대 없습니다. 퀴즈에서 요구하는 문제를 어떻게든 해결하셨다는 부분이 대단한 겁니다.

여기서 한걸음 더 나아가시기 위해서는 다양한 경험이 도움될 것 같은데요 작성하신 코드로 보아 지금 단계에서는 클래스의 활용법에 대한 시각을 조금 달리할 필요가 있어 보입니다. 클래스는 무언가를 만들기 위한 설계도 또는 사용설명서 정도로 이해하시면 좋아요. 또는 양식 정도로 생각하셔도 좋습니다.

가령 우리가 어느 인기 많은 식당에 갔을 때 웨이팅을 위해서는 이름과 전화번호 정보를 남기곤 하는데요. 이때 오늘 방문하실 손님의 이름이 무엇인지, 전화번호가 무엇인지는 그 누구도 모릅니다. 즉 이름과 전화번호를 특정할 수 없는 것이죠. 

만약 일반 식당이 아닌 가정집이라면, 그리고 친척들의 모임이라고 하면 큰아버지, 작은아버지, 큰어머니, 작은어머니, 사촌1, 사촌2, … 와 같이 고정된 인원일테니 출석부(?) 용도로 웨이팅 리스트를 만들 수 있을거에요. 모두 10명이다 그러면 10명의 이름과 전화번호를 모두 포함하여 리스트를 인쇄한 다음에 집으로 오시면 한 분씩 체크를 해볼 수 있겠죠. (과연 이런 집이 있을지는 모르겠습니다 ^^;)

하지만 일반 식당이라면 누가 방문할지 알 수 없으므로 이름과 전화번호 부분은 그냥 빈칸으로 둔 상태에 웨이팅 리스트를 인쇄할 것입니다. 그런 다음 손님이 방문하시면 그때마다 한 줄씩 이름과 전화번호가 작성이 될 거에요.

클래스는 이런 것입니다.
어떤 데이터가 들어올지는 모르지만 일단 이름과 전화번호라는 데이터를 위한 구조(양식)를 제공하는 거에요. 그러면 그 양식에 따라 데이터가 하나 둘 만들어지는 겁니다. 퀴즈의 경우라면 이름과 나이라는 양식을 제공하는 클래스가 바로 Customer 인 것이죠. 질문자께서 작성하신 코드는 일반 식당이 아닌 가정집에 해당하는 형태의 클래스입니다. 이렇게 작성하시게 되면 그 가정집에 대해서는 문제가 없겠지만 다른 가정집이라고 하면 클래스의 내용이 완전히 바뀌게 될 것이며, 또는 친척들 중에 새로운 조카가 탄생한다거나 하면 클래스 일부가 수정되어야 할 것입니다.

클래스의 사용에 대해서는 책이나 구글링 등을 통해 설명을 찾아보시면 더 다양한 사례에 대해 경험해보실 수 있을 거에요. 그 곳에서 알려주는 상황에 따른 적절한 클래스를 만드는 방법을 배워보는 거죠. 가령 동물이라는 클래스를 만든다면 어떤 식으로 구현하는지, 어떤 변수와 메소드를 포함하는지, 상속관계는 어떻게 하는지 등등 미리 고민해보신 다음에 책이나 웹페이지에서 안내하는 방법과 질문자께서 생각 또는 구현한 것을 비교해보시면 학습에 도움이 되실 거에요.

chatGPT 를 이용해서 학습하시는 것도 매우 좋습니다.
"자바에서 동물 데이터를 관리하기 위한 클래스를 만들어줘" 라는 문장 정도로 질문을 하면 다음과 같은 답을 얻을 수 있어요.

public class Animal {
    private String name;
    private int age;
    private String species;

    public Animal(String name, int age, String species) {
        this.name = name;
        this.age = age;
        this.species = species;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getSpecies() {
        return species;
    }

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

    public void setAge(int age) {
        this.age = age;
    }

    public void setSpecies(String species) {
        this.species = species;
    }
}

엄청나죠?
chatGPT 의 답변을 항상 신뢰할 수는 없지만 이 정도 질문에 대한 답변은 충분히 훌륭하게 제공한다고 생각합니다. 프로그래밍 공부를 하실 때 많은 도움을 받으실 수 있을거에요.

답변이 다소 길었는데 고민하시는 부분에 대해 답변이 될 수 있었으면 합니다.
앞으로의 남은 공부도 응원하겠습니다 ^^
감사합니다.

ji Khan님의 프로필

ji Khan

질문자

2023.07.03

답변 감사합니다 : )

너무 깔끔하게 설명해주셔서 한 번에 이해가 되었습니다. 답변해주시는 게 번거로우셨을텐데 꽤나 길게 답변해주셔서 주말에 확인하고 놀랐고 감동이었습니다ㅠ_ㅠ 응원이 되고 힘이 납니다!

다음에 또 궁금한 게 생긴다면 그 때도 부탁 드리겠습니다. 너무 감사 드려요! 😊😊