안녕하세요 코드팩토리님! 강의 잘 듣고 있습니다. 질문이 있어서 댓글 남깁니다. class를 변수로 사용하는 과정에서(main함수 안), 부모 클래스인 Idol에서는 name:’슬기’, group:’레드벨벳’과 같이 변수에 해당하는 정보를 기입했는데, 부모 클래스를 상속받은 BoyGroup 클래스에서는 ‘RM’, ‘BTS’와 같이 변수는 적지 않고 내용만 기입이 되더라구요.(name:’RM’, group:’BTS’와 같이 적으니까 오류가 발생합니다) 어째서 부모의 모든 것을 상속받았는데, 정보를 입력하는 코드가 다르게 적힌 건가요?
안녕하세요 강의 감사합니다. 제가 지식이 부족해 궁금한것이 있어 질문드립니다. 지금 저는 유튜브보면서 무작정 앱공부를 하고있는데요 제가 만든 body 안에 넣은 container를 또 다시 body안에 여러개 복사시켜 column을 활용해 세로정렬시키고 싶은데 이경우에도 상속을 활용할수 있을까요? 처음에는 처음 쓴 코드를 단순복사하여 다시 쓸렸는데 그렇게하다간 코드가 너무 길어질거같아서 질문드립니다
궁금한 점이 있습니다. BoyGroup rm = new BoyGroup('rm', 'BTS'); 아래에 rm.name는 부모의 변수값이기에 'rm'의 값이 출력되는 것은 이해 했습니다. 갑짜기 하나의 의문점이 생겨서 자식 클래스 BoyGroup아래에 private 변수로 String name ='지민'; 을 일부로 추가 작성했습니다. 부모의 private 변수 name와 자식의 private변수 name를 어떻게 구분 할지 궁금해져서요. 결과적으로는 rm.name는 '지민'이 출력되던데 그렇다면 부모의 private 변수 name값은 자식 클래스 rm을 사용한 경우 함수나 get을 추가 작성하지 않고는 직접적으로 가져오지 못하는 것인가요? 저는 에러가 나지 않을까 생각했습니다.
상속은 받는 객체만 의미가 있습니다. 현실에서도 부모의 자산을 상속받으면 자식이 재산이 늘어나는거고 부모는 받는게 없는 것처럼요. 부모는 자식의 속성을 상속받지 않기때문에 당연히 자식의 속성을 알 수 없습니다. 반면에 자식은 override를 통해 덮어쓰거나 super를 사용해서 부모의 속성을 가져올 수 있습니다.
연습삼아 따라하면서 클래스명을 바꾸어 '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}입니다.');/ } }
안녕하세요 코드까지 첨부해주셔서 감사합니다. 직접 실행을 해보았는데 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 으로 변경해야합니다. 질문자분이 주의하셔야 할 부분은 생성자의 파라미터로 값을 받았을때 이 값들이 바로 클래스의 변수로 연동이 되지 않는다는 것입니다. 생성자의 파라미터는 해당되는 값들을 인풋을 받겠다는 의미가 다이며 입력받은 값을 저장하고 재활용 하는건 해당 작업을 위 설명대로 따로 코딩을 해주셔야합니다! 이해가 안되는 부분이 있으시면 또 질문을 해주세요!
수강 완료
안녕하세요 코드팩토리님! 강의 잘 듣고 있습니다. 질문이 있어서 댓글 남깁니다. class를 변수로 사용하는 과정에서(main함수 안), 부모 클래스인 Idol에서는 name:’슬기’, group:’레드벨벳’과 같이 변수에 해당하는 정보를 기입했는데, 부모 클래스를 상속받은 BoyGroup 클래스에서는 ‘RM’, ‘BTS’와 같이 변수는 적지 않고 내용만 기입이 되더라구요.(name:’RM’, group:’BTS’와 같이 적으니까 오류가 발생합니다) 어째서 부모의 모든 것을 상속받았는데, 정보를 입력하는 코드가 다르게 적힌 건가요?
안녕하세요. Null Safety 이후 버전으로 강의가 업데이트 되었습니다. 새로운 강의로 배워보세요!
@hebrews1736 문의하신 내용 책에 있습니다!
안녕하세요 강의 감사합니다. 제가 지식이 부족해 궁금한것이 있어 질문드립니다. 지금 저는 유튜브보면서 무작정 앱공부를 하고있는데요
제가 만든 body 안에 넣은 container를 또 다시 body안에 여러개 복사시켜 column을 활용해 세로정렬시키고 싶은데 이경우에도 상속을 활용할수 있을까요?
처음에는 처음 쓴 코드를 단순복사하여 다시 쓸렸는데 그렇게하다간 코드가 너무 길어질거같아서 질문드립니다
위젯은 상속을 하지 않는게 베스트 프랙티스입니다!
궁금한 점이 있습니다.
BoyGroup rm = new BoyGroup('rm', 'BTS'); 아래에 rm.name는 부모의 변수값이기에 'rm'의 값이 출력되는 것은 이해 했습니다.
갑짜기 하나의 의문점이 생겨서 자식 클래스 BoyGroup아래에 private 변수로 String name ='지민'; 을 일부로 추가 작성했습니다.
부모의 private 변수 name와 자식의 private변수 name를 어떻게 구분 할지 궁금해져서요.
결과적으로는 rm.name는 '지민'이 출력되던데 그렇다면 부모의 private 변수 name값은 자식 클래스 rm을 사용한 경우 함수나 get을 추가 작성하지 않고는 직접적으로 가져오지 못하는 것인가요?
저는 에러가 나지 않을까 생각했습니다.
상속은 받는 객체만 의미가 있습니다. 현실에서도 부모의 자산을 상속받으면 자식이 재산이 늘어나는거고 부모는 받는게 없는 것처럼요. 부모는 자식의 속성을 상속받지 않기때문에 당연히 자식의 속성을 알 수 없습니다. 반면에 자식은 override를 통해 덮어쓰거나 super를 사용해서 부모의 속성을 가져올 수 있습니다.
좋은 강의 감사합니다. 이 부분 들으면서 궁금한 점이 있습니다. 막상 뭘 두드려봐야 이해가 되네요. 그래서 연습삼아, Idol 클래스 상속 받는 BoyGroup 클래스에 새로운 변수를 만들어서 넣어 볼까하고 이래저래 시도했는데 잘 안되네요. 어떻게 해야 할까요?
안녕하세요. 어떤식으로 넣으려고 시도 하셨는지 코드를 넣어주시면 설명드리도록 하겠습니다!
연습삼아 따라하면서 클래스명을 바꾸어 '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}입니다.');/
}
}
안녕하세요 코드까지 첨부해주셔서 감사합니다. 직접 실행을 해보았는데 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 으로 변경해야합니다.
질문자분이 주의하셔야 할 부분은 생성자의 파라미터로 값을 받았을때 이 값들이 바로 클래스의 변수로 연동이 되지 않는다는 것입니다. 생성자의 파라미터는 해당되는 값들을 인풋을 받겠다는 의미가 다이며 입력받은 값을 저장하고 재활용 하는건 해당 작업을 위 설명대로 따로 코딩을 해주셔야합니다! 이해가 안되는 부분이 있으시면 또 질문을 해주세요!
@@codefactory_official 아! 이제야 이해가 되는 것 같습니다.
친절한 답변 정말 감사합니다~ ^^