[왕초보 무료 프로그래밍 언어 강의] [Dart] #19 - Class [#3] Inheritance

Поделиться
HTML-код
  • Опубликовано: 24 сен 2024
  • [코드팩토리 Flutter 중급 강의]
    Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
    bit.ly/3PKecdl
    [코드팩토리 Flutter 왕초보 강의 - 인프런]
    Flutter 초보용 강의입니다! 재미랑 이론 모두 놓치지 마세요!
    bit.ly/3tflvR6
    Null Safety 대응 업데이트 강의
    #1 Dart 기본기
    • [무료 프로그래밍 강의] 1시간만에 끝내...
    Flutter 에서 사용되는 Dart 언어 프로그래밍 왕초보용 강의입니다.
    Dart 언어의 Class Inheritance (상속) 에 대해 배워보는 강의입니다.
    [블로그]
    코드팩토리 블로그에 오시면 더욱 많은 정보를 얻으실 수 있습니다. 글로 코드를 보고싶으신 분들은 놀러와주세요!
    blog.codefacto...
    [이메일 문의]
    jc@codefactory.ai
    [디스코드 서버]
    링크 - bit.ly/3HzRzUM
    [카카오 채널]
    카카오 채널은 잡담용 채널입니다. 코드 또는 강의에 대한 문의는 디스코드 채널을 이용해주세요.
    링크 - bit.ly/cfkakao
    [페이스북]
    링크 - bit.ly/3C4jfjw

Комментарии • 14

  • @banbazy
    @banbazy 2 года назад +1

    수강 완료

  • @안재홍-f5i
    @안재홍-f5i 2 года назад +1

    안녕하세요 코드팩토리님! 강의 잘 듣고 있습니다. 질문이 있어서 댓글 남깁니다. class를 변수로 사용하는 과정에서(main함수 안), 부모 클래스인 Idol에서는 name:’슬기’, group:’레드벨벳’과 같이 변수에 해당하는 정보를 기입했는데, 부모 클래스를 상속받은 BoyGroup 클래스에서는 ‘RM’, ‘BTS’와 같이 변수는 적지 않고 내용만 기입이 되더라구요.(name:’RM’, group:’BTS’와 같이 적으니까 오류가 발생합니다) 어째서 부모의 모든 것을 상속받았는데, 정보를 입력하는 코드가 다르게 적힌 건가요?

    • @codefactory_official
      @codefactory_official  2 года назад

      안녕하세요. Null Safety 이후 버전으로 강의가 업데이트 되었습니다. 새로운 강의로 배워보세요!

    • @hebrews1736
      @hebrews1736 3 месяца назад

      @@codefactory_official 안녕하세요? 책을 구입하고 어려워서 유튜브로 따라 하고 있는데요 어느 순간부터 오류가 발생합니다. 댓글로도 여러번 말씀하신 Null Safety 때문인 거 같습니다. 댓글로 설명하지 못할 정도로 전혀 새로운 코드로 접근해야 하는건가요? 새로운 강의는 어디에서 배울 수 있을까요? 책을 구입했는데, dart 완전 정보+ 플러터 3.x 되어 있던데.. 책에는 다트 새로운 버전이 소개되어 있을까요? 앞서도 말씀 드렸듯이 책을 보다가 막혀서 유튜브로 끝내고 다시 책을 돌아가자 계획하고 있어서요.

    • @codefactory_official
      @codefactory_official  3 месяца назад

      @@hebrews1736 문의하신 내용 책에 있습니다!

  • @정재민-m3u
    @정재민-m3u 2 года назад +1

    궁금한 점이 있습니다.
    BoyGroup rm = new BoyGroup('rm', 'BTS'); 아래에 rm.name는 부모의 변수값이기에 'rm'의 값이 출력되는 것은 이해 했습니다.
    갑짜기 하나의 의문점이 생겨서 자식 클래스 BoyGroup아래에 private 변수로 String name ='지민'; 을 일부로 추가 작성했습니다.
    부모의 private 변수 name와 자식의 private변수 name를 어떻게 구분 할지 궁금해져서요.
    결과적으로는 rm.name는 '지민'이 출력되던데 그렇다면 부모의 private 변수 name값은 자식 클래스 rm을 사용한 경우 함수나 get을 추가 작성하지 않고는 직접적으로 가져오지 못하는 것인가요?
    저는 에러가 나지 않을까 생각했습니다.

    • @codefactory_official
      @codefactory_official  2 года назад

      상속은 받는 객체만 의미가 있습니다. 현실에서도 부모의 자산을 상속받으면 자식이 재산이 늘어나는거고 부모는 받는게 없는 것처럼요. 부모는 자식의 속성을 상속받지 않기때문에 당연히 자식의 속성을 알 수 없습니다. 반면에 자식은 override를 통해 덮어쓰거나 super를 사용해서 부모의 속성을 가져올 수 있습니다.

  • @jongnami123
    @jongnami123 2 года назад

    안녕하세요 강의 감사합니다. 제가 지식이 부족해 궁금한것이 있어 질문드립니다. 지금 저는 유튜브보면서 무작정 앱공부를 하고있는데요
    제가 만든 body 안에 넣은 container를 또 다시 body안에 여러개 복사시켜 column을 활용해 세로정렬시키고 싶은데 이경우에도 상속을 활용할수 있을까요?
    처음에는 처음 쓴 코드를 단순복사하여 다시 쓸렸는데 그렇게하다간 코드가 너무 길어질거같아서 질문드립니다

    • @codefactory_official
      @codefactory_official  2 года назад

      위젯은 상속을 하지 않는게 베스트 프랙티스입니다!

  • @Floating_Speaker
    @Floating_Speaker 3 года назад +1

    좋은 강의 감사합니다. 이 부분 들으면서 궁금한 점이 있습니다. 막상 뭘 두드려봐야 이해가 되네요. 그래서 연습삼아, Idol 클래스 상속 받는 BoyGroup 클래스에 새로운 변수를 만들어서 넣어 볼까하고 이래저래 시도했는데 잘 안되네요. 어떻게 해야 할까요?

    • @codefactory_official
      @codefactory_official  3 года назад

      안녕하세요. 어떤식으로 넣으려고 시도 하셨는지 코드를 넣어주시면 설명드리도록 하겠습니다!

    • @Floating_Speaker
      @Floating_Speaker 3 года назад

      연습삼아 따라하면서 클래스명을 바꾸어 'Person' 클래스와 이를 상속하는 'Student' 클래스를 만들었습니다.
      그리고 [질문1]과 같이 이래저래 만져보다가 클래스 인자를 추가했는데
      오류는 없는데, Student 인스턴스 생성 시 char 값을 넣어도 반영이 안되네요.
      main() {
      Person man1 = new Person(
      name: "어린이",
      age: 9);

      man1.sayName();
      man1.sayAge();
      print('');
      print('--------- 상속 인스턴스 연습 -----------');
      print('');
      Student student1 = new Student('beginer', 99, 'kind');
      // [질문 1] 세번째 'kind'를 넣어도 'fine'으로 나옴
      student1.sayName();
      student1.sayAge();
      student1.sayStudent();
      print(student1.char);
      }
      class Person {
      String _name;
      int _age;
      Person({
      final String name,
      final int age,
      }) : this._name = name,
      this._age = age;
      void sayName() {
      print("제 이름은 '${_name}' 입니다");
      }
      void sayAge() {
      print("제 나이는 '${this._age}' 입니다.");
      }
      }

      class Student extends Person {
      String char = 'fine';

      Student(
      String new_name, int age, String char // 생성자에 char 추가
      ) : super(name:new_name, age:age); // 오류 없음

      void sayStudent() {
      print('제 이름은 ${this._name}입니다.'); // 생성자 변수명(new_name)으로 하면 오류
      print('학생 성격은 ${this.char}입니다.');/
      }
      }

    • @codefactory_official
      @codefactory_official  3 года назад +2

      안녕하세요 코드까지 첨부해주셔서 감사합니다. 직접 실행을 해보았는데 constructor 개념에 조금 더 설명을 드려야 할 것 같습니다. 일단 전반적으로 공부하기 좋은 코드를 작성하신 것 같습니다. 코멘트로 질문 달아주신 순서대로 답변을 드려보도록 하겠습니다.
      1. 세번째 kind 를 넣어도 fine 으로 나옴.
      이 부분은 kind 를 생성자에 넣어주셨지만 Student 클래스의 char 변수에 입력을 안해주셔서 그렇습니다. 생성자의 Student(String new_name, int age, String char) 로 작성하신 부분은 파라미터를 해당 순서대로 받겠다는 의미일 뿐이지 여기서 받아주는 값들을 클래스의 변수로 입력을 시키려면 Student(위와동일...): this.char = char, super(name:new_name, age:age); 이런식으로 파라미터로 받은 값으로 원하시는 변수 값을 변경을 해주셔야합니다. 중복으로 코드를 많이 작성하는걸 피하고 싶으시면 Student(String new_name, int age, this.char):super(name:new_name, age:age); 이런식으로 this 키워드를 사용해서 받아준 파라미터를 바로 클래스의 변수에 연동시킬 수 있습니다.
      2. 생성자 변수명 new_name 으로 하면 오류
      위와 같은 맥락의 답변이 될 것 같습니다. Student 클래스의 생성자에서 new_name 파라미터를 받고 계시지만 이 new_name 파라미터를 super 클래스의 name 변수에 저장하고 계십니다. 예) super(name:new_name...)
      만약에 new_name 이라는 명칭을 그대로 사용하고 싶으시면 변수의 이름을 new_name 으로 변경해야합니다.
      질문자분이 주의하셔야 할 부분은 생성자의 파라미터로 값을 받았을때 이 값들이 바로 클래스의 변수로 연동이 되지 않는다는 것입니다. 생성자의 파라미터는 해당되는 값들을 인풋을 받겠다는 의미가 다이며 입력받은 값을 저장하고 재활용 하는건 해당 작업을 위 설명대로 따로 코딩을 해주셔야합니다! 이해가 안되는 부분이 있으시면 또 질문을 해주세요!

    • @Floating_Speaker
      @Floating_Speaker 3 года назад +1

      @@codefactory_official 아! 이제야 이해가 되는 것 같습니다.
      친절한 답변 정말 감사합니다~ ^^