|
| 1 | +class JavaScriptDeepStudy { |
| 2 | + constructor () { |
| 3 | + // 인스턴스를 따로 만들어서 인자에 필드 값을 넣어줘야하는 줄 알았는데 default 값으로 설정하는 것이었다.. |
| 4 | + this.member = ["최정혜","손진영","김영주","김현지","윤한영","조진혁"] |
| 5 | + this.book = "자바스크립트 완벽가이드"; |
| 6 | + this.sequence = [ |
| 7 | + "1.checking Time", |
| 8 | + "2. Test Time", |
| 9 | + "3. Q&A Time", |
| 10 | + "4. Killing Time", |
| 11 | + "5. Revieew Time", |
| 12 | + "6. Next Time" |
| 13 | + ]; |
| 14 | + this.state = "진행중" |
| 15 | + // 정혜님 좋아하는 과일은 default 값으로 설정해야 했다..! ㅜ |
| 16 | + this.JungHyeFavFruit = "strawbarry"; |
| 17 | + } |
| 18 | + |
| 19 | + get isState() { |
| 20 | + return ( |
| 21 | + console.log(this.state + "입니다. 만약 완료를 원한다면 setState 함수를 이용해주세요.") |
| 22 | + ) |
| 23 | + } |
| 24 | + |
| 25 | + // 완료 state도 있어야할거 같았고 한번 완료 되면 변경되지 않으니 이렇게 구성했습니다. |
| 26 | + get setState() { |
| 27 | + this.state = "완료"; |
| 28 | + return (console.log(this.state+ "중인 상태로 변경되었습니다.")) |
| 29 | + } |
| 30 | + |
| 31 | + // Array 관련 메서드가 안먹혀서 for, if문으로 대체했습니다. |
| 32 | + // 리팩토링이 필요한 코드이니 조언 해주시면 감사드리겠습니다..! |
| 33 | + get isMember() { |
| 34 | + let memberCount = false; |
| 35 | + for(let i = 0; i < this.member.length; i++) { |
| 36 | + if(this.name === this.member[i]) { |
| 37 | + return console.log(true); |
| 38 | + } else { |
| 39 | + count = true; |
| 40 | + } |
| 41 | + } |
| 42 | + if(memberCount) { |
| 43 | + console.log("존재하지 않는 멤버입니다."); |
| 44 | + } |
| 45 | + } |
| 46 | +} |
| 47 | + |
| 48 | +class Person extends JavaScriptDeepStudy { |
| 49 | + constructor (name, gender, age, favoriteLng, favFruit) { |
| 50 | + // 자식 클래스는 초기화 + 부모에 있는 필드들을 가져오기 위해 super() 해줘야 함 |
| 51 | + super(); |
| 52 | + this.name = name; |
| 53 | + this.gender = gender; |
| 54 | + this.age = age; |
| 55 | + this.favoriteLng = favoriteLng; |
| 56 | + this.favFruit = favFruit; |
| 57 | + } |
| 58 | + |
| 59 | + // 모든 메서드 인자 넣어줄 필요 없으니 getter로 설정 |
| 60 | + get isTwentyfive() { |
| 61 | + if(this.age+1 > 25 && typeof this.age === 'number') { |
| 62 | + return console.log(true); |
| 63 | + } else { |
| 64 | + return console.log(false); |
| 65 | + } |
| 66 | + } |
| 67 | + get twoYearsAgoAge() { |
| 68 | + if(typeof this.age === 'number') { |
| 69 | + return console.log(this.age - 2); |
| 70 | + } else { |
| 71 | + return console.log("숫자로 입력해주세요:)"); |
| 72 | + } |
| 73 | + } |
| 74 | + // 그래서 이 메서드도 Person 클래스에 있는 favFruit랑 부모 클래스에 있는 |
| 75 | + // jungHyeFavFruit와 비교해야했다. |
| 76 | + get isEqualFruit() { |
| 77 | + if(this.favFruit === this.JungHyeFavFruit) { |
| 78 | + return console.log(true); |
| 79 | + } else { |
| 80 | + return console.log(false); |
| 81 | + } |
| 82 | + } |
| 83 | +} |
| 84 | + |
| 85 | +let jinyoung = new Person("손진영", "man", 25, "typescript", "strawbarry"); |
| 86 | +let namju = new Person("김남주", "man", "23", "c", "melon"); |
| 87 | + |
| 88 | +jinyoung.isEqualFruit; |
| 89 | +jinyoung.twoYearsAgoAge |
| 90 | +jinyoung.isTwentyfive |
| 91 | +jinyoung.isMember |
| 92 | +jinyoung.isState |
| 93 | +jinyoung.setState |
| 94 | +console.log("----------------------------------"); |
| 95 | + |
| 96 | +// 위와 반대되는 결과 |
| 97 | + |
| 98 | +namju.isEqualFruit |
| 99 | +namju.twoYearsAgoAge |
| 100 | +namju.isTwentyfive |
| 101 | +namju.isMember |
0 commit comments