diff --git a/refactoring/participants.cvs b/refactoring/participants.cvs new file mode 100644 index 00000000..ef9b9370 --- /dev/null +++ b/refactoring/participants.cvs @@ -0,0 +1,420 @@ +참여자 (419),1주차,2주차,3주차,4주차,5주차,6주차,7주차,8주차,9주차,10주차,11주차,12주차,13주차,14주차,15주차,참석율 +0417taehyun,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +1031nice,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +2yeseul,O,O,X,O,O,O,O,O,O,O,O,O,X,O,O,86.66666666666667 +372dev,O,O,O,O,O,O,O,O,O,X,X,X,X,X,X,60.0 +9bini,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +Ahnyezi,O,X,X,O,O,O,O,O,O,O,O,O,X,X,X,66.66666666666667 +AimingBro,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +Azderica,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +BaeJi77,O,O,O,O,O,O,O,O,O,O,X,X,X,X,X,66.66666666666667 +Bik00,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +BrandPark,O,X,X,X,X,X,X,X,X,X,X,X,O,X,X,13.333333333333334 +ByungJun25,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +Changhwan-Son,O,O,X,X,O,X,X,X,X,X,X,X,X,X,X,20.0 +Chohongjae,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +Choi-Yu-Rim,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +ChoiGiSung,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +DDOEUN,O,O,O,O,O,O,O,X,O,O,O,O,O,X,X,80.0 +DevJiho,O,O,O,O,O,O,X,X,X,X,X,X,X,X,X,40.0 +DevRyu,X,O,O,O,X,X,X,X,X,X,X,X,X,X,X,20.0 +DevelopJKong,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +DonggeonHa,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +Dubidubab,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +EdwardJae,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +G-ONL,X,X,X,O,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +GGob2,O,O,O,X,O,O,O,O,X,X,X,X,X,X,X,46.666666666666664 +GeneratorEOM,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +GetMapping,O,O,O,O,O,O,O,O,O,X,O,O,X,X,X,73.33333333333333 +Gomding,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,93.33333333333333 +GunnwooKim,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +GyosunShin,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +HYEBPARK,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,46.666666666666664 +HanJaehee,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +Hongyeongjune,O,O,X,X,O,O,X,X,X,X,X,X,X,X,X,26.666666666666668 +HwangWonGyu,O,X,X,X,X,X,O,O,O,O,X,X,X,X,X,33.333333333333336 +Hwanse,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +HyangKeunChoi,O,O,O,O,O,O,O,O,O,O,O,O,X,X,O,86.66666666666667 +HyeonWuJeon,O,O,O,O,O,O,O,O,O,O,X,X,X,X,X,66.66666666666667 +JEONGHWANMIN,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +JIN-096,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +JJongSue,X,X,X,O,O,O,O,O,O,O,X,O,O,X,O,66.66666666666667 +JK-Kim4,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +JOYB28,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +JUNGHOJONG,X,X,X,X,X,X,O,X,X,X,X,X,X,X,X,6.666666666666667 +JamieShin0201,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +Jangilkyu,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +Jason-time,O,O,O,O,O,O,O,O,O,O,O,O,X,O,X,86.66666666666667 +JeongJin984,O,O,X,O,O,O,O,O,O,O,X,O,O,O,O,86.66666666666667 +Jii-Yeong,O,O,O,O,O,O,X,X,X,X,X,X,X,X,X,40.0 +JongWoonLee,O,O,O,O,O,O,O,O,O,O,O,O,X,O,X,86.66666666666667 +JoongSeokD,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +JoosJuliet,O,O,O,X,X,O,O,X,X,X,X,X,X,X,X,33.333333333333336 +JopopScript,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +JsKim4,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +JuHyun419,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +Jul-liet,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +Jun2-stack,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +JungHyeokMoon,O,O,O,O,X,O,O,O,O,O,O,O,X,O,X,80.0 +Junhan0037,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +KJJ924,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,80.0 +KilJaeeun,O,O,O,O,O,O,O,O,O,O,X,O,O,X,X,80.0 +Kim-JunHyeong,O,X,O,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +Kimminsu0922,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +KwangJongJeon,O,O,O,X,O,O,O,O,O,O,O,O,X,X,X,73.33333333333333 +Kwon-woohee,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +Lee-jaeyong,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +LeeGiCheol,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +LeeJeongSeok,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,80.0 +Livenow14,O,O,O,O,O,O,X,X,X,X,X,X,X,X,X,40.0 +Lob-dev,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +MinHeum,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +MoonHKLee,O,O,O,O,O,O,O,O,O,O,O,X,X,X,O,80.0 +Myeongkook,O,O,O,X,X,X,X,X,O,X,X,X,X,X,X,26.666666666666668 +Ohzzi,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +Park-SooYeon,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +Park-Youngwoo,X,X,X,X,O,O,O,O,O,X,X,X,X,X,X,33.333333333333336 +ParkIlHoon,O,O,O,O,O,O,X,X,X,X,X,X,X,X,X,40.0 +Parkyunhwan,O,O,O,O,X,O,O,O,X,X,X,X,X,X,X,46.666666666666664 +QurieMoon,O,X,X,X,X,O,O,X,X,X,O,X,X,X,X,26.666666666666668 +RGunny,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +RealSong88,O,X,X,X,X,O,O,O,O,X,X,X,X,X,X,33.333333333333336 +Rebwon,O,O,X,O,O,O,O,X,X,X,X,X,X,X,X,40.0 +Resilient923,O,O,X,X,O,O,O,O,O,X,O,O,O,O,O,80.0 +Ryureka,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +SJParkkk,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,80.0 +SeongJae-dev,X,X,X,O,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +SeungWoo-Oh,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +ShimSeoungChul,X,O,O,O,O,O,O,O,O,O,O,O,O,X,X,80.0 +So-Sung,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +SooJungDev,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +Sungjun-HQ,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +TaeYing,X,X,O,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +Taein2,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +UmJaeJeong,O,O,O,X,X,X,X,O,O,O,O,O,O,X,X,60.0 +WonYong-Jang,O,O,O,X,O,O,O,O,O,O,O,O,X,X,X,73.33333333333333 +Wordbe,X,X,X,X,X,O,O,X,X,X,X,X,X,X,X,13.333333333333334 +Yadon079,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +YeseulDo,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +Yo0oN,O,O,O,O,O,O,O,O,X,O,O,O,X,X,O,80.0 +Youngerjesus,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +Youngjin-KimY,X,O,O,O,O,O,X,X,X,X,X,X,X,X,X,33.333333333333336 +YuSeungMo,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +ZhenxiKim,X,X,X,X,X,O,O,O,O,O,O,O,X,X,X,46.666666666666664 +abcdsds,O,O,O,O,X,O,O,O,O,O,O,O,O,X,X,80.0 +accidentlywoo,O,X,O,O,O,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +addadda15,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +ahyz0569,O,O,O,O,O,O,O,X,X,O,O,O,X,O,O,80.0 +alweiis,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +angelatto,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +anna9001,X,X,X,X,X,O,O,O,X,X,X,X,X,X,X,20.0 +asqwklop12,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +awesomeo184,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +azurealstn,O,O,O,X,X,O,X,O,O,O,O,X,O,X,X,60.0 +bbq1319,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +binaryyoung,O,X,X,X,X,X,X,X,X,X,X,X,X,O,X,13.333333333333334 +bingbingpa,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +binghe819,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +bjsloveer,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +blingbn,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +bomingeem,X,X,X,X,X,X,X,X,X,O,X,X,X,X,X,6.666666666666667 +bong6981,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +boraborason,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +bperhaps,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +castleCircle,O,O,X,X,O,O,O,O,O,X,O,X,X,X,X,53.333333333333336 +catsbi,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +cattaku,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +cellenar26,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +chaechae0322,O,O,X,O,O,O,X,X,X,X,X,X,X,X,X,33.333333333333336 +chaejunlee,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +chlaudeh,O,O,O,X,O,O,O,O,O,X,X,X,X,X,X,53.333333333333336 +choiyoungkwon12,O,O,O,O,O,O,O,O,O,O,O,X,X,X,O,80.0 +chulphan,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,80.0 +ckr3453,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +clap1030,O,X,X,X,O,X,O,O,O,X,X,X,X,X,X,33.333333333333336 +cmg1411,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +cocodori,X,X,X,O,O,O,O,O,O,X,X,X,X,X,X,40.0 +cold-pumpkin,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +coldhoon,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +conyconydev,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +cs7998,O,O,O,O,O,O,O,O,O,O,O,X,X,O,X,80.0 +d-h-k,O,O,O,X,O,O,O,O,X,O,O,X,X,X,X,60.0 +dacapolife87,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +dadoldasol,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +damho1104,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +danheean,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +daroguzo,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +ddings73,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +delusidiot,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +dev-jaekkim,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,46.666666666666664 +devHTak,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +devShLee7017,O,O,O,O,O,O,O,O,O,O,O,O,X,O,X,86.66666666666667 +devksh930,O,O,X,O,O,O,O,X,X,X,X,X,X,X,X,40.0 +devvip,O,O,O,O,O,O,O,O,O,X,O,O,X,O,X,80.0 +dionidip,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +dip0cean,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +dkyou7,X,X,X,O,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +dmstjd1024,O,O,O,O,O,O,O,O,X,O,O,O,X,O,X,80.0 +dongsub-joung,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +dongyeon94,X,O,O,O,O,O,O,O,O,O,O,O,O,O,X,86.66666666666667 +doyoung0205,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +dsunni,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +dudqls5271,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +dwywdo,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +eatnows,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +ehdrhelr,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +eichel130,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,46.666666666666664 +ejxzhn22,O,O,O,O,O,O,O,O,O,X,X,X,X,X,X,60.0 +elon09,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +enothfif,X,X,X,X,X,X,X,X,X,X,X,X,X,X,O,6.666666666666667 +eogh234,O,O,O,O,O,O,X,X,X,X,X,X,X,X,X,40.0 +eomgr55,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +epark-grace,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +etff,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +eunbok,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +fkfkfk9,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,46.666666666666664 +fpdjsns,O,O,X,O,O,O,O,X,X,O,O,O,X,X,X,60.0 +garlickim,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +gblee87,O,O,O,O,O,X,X,X,X,O,X,X,X,X,X,40.0 +gcha-kim,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +geneaky,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +ggomjae,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +ghYoon93,X,X,X,O,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +ghost,O,X,O,O,O,X,X,O,X,X,X,X,X,X,X,33.333333333333336 +ghwann,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +gintire,O,O,O,O,O,O,O,O,X,X,O,O,X,X,X,66.66666666666667 +githubjam2,O,O,O,O,O,O,O,O,O,X,X,X,X,X,X,60.0 +giyeon95,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +glowing713,X,X,X,O,O,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +gmldnjs26,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +go95305,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +good-influence,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +goodzzong,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +gowoonsori,O,O,O,O,O,X,X,X,X,O,O,O,O,O,O,73.33333333333333 +gtpe,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +gurumee92,O,X,O,O,O,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +haeinoh,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +haemanlee,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +haemin-jeong,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +haenyilee,O,X,X,X,X,X,O,O,X,X,X,X,X,X,X,20.0 +hanseo0109,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +hanull,O,X,X,O,O,O,O,O,X,X,X,X,X,X,X,40.0 +heewonham,O,O,O,X,O,O,O,O,O,O,O,O,O,O,X,86.66666666666667 +herohe910623,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +hhlyn0328,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +hiYoungSeop,X,X,X,X,X,X,X,X,O,X,X,X,X,X,X,6.666666666666667 +highright96,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +hippo420,X,X,X,X,X,X,X,X,X,O,X,X,X,X,X,6.666666666666667 +hoi-hoon,O,O,O,O,X,X,O,O,O,O,O,O,O,O,X,80.0 +hojunnnnn,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,93.33333333333333 +hong918kr,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +hongminpark,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +honux77,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +hwonny,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +hyenny,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +hyeonic,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +hyngsk,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +hypernova1,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +ianstream,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +id6827,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +idiot2222,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,46.666666666666664 +infoqoch,O,O,O,O,O,X,X,X,X,X,O,X,X,X,X,40.0 +inhalin,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +integer87,X,X,X,X,X,X,X,O,O,X,X,O,X,X,X,20.0 +inuit57,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +iseunghan,O,O,O,O,O,O,O,O,O,O,X,X,X,X,X,66.66666666666667 +jadenkim94,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +jaeeunis,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,93.33333333333333 +jaehyunup,O,X,X,O,O,X,X,X,X,X,X,X,X,X,X,20.0 +jaewon0913,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +jaeyeon93,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +jameshan521,X,X,X,X,X,X,X,X,O,O,O,O,X,X,X,26.666666666666668 +jangpanda,O,O,O,O,O,O,X,X,X,X,X,X,X,X,X,40.0 +janjanee92,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +jbb9229,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +jeeneee,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +jessi68,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +jigmini,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,93.33333333333333 +jikimee64,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +jiwoo-choi,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +jjone36,O,O,O,O,O,X,O,O,O,O,O,X,O,O,O,86.66666666666667 +joey3116,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,80.0 +jongnan,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +jongyeans,O,O,O,O,O,O,O,O,O,X,O,O,O,X,X,80.0 +joowankim,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +juhee2,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +junhok82,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +justinnn980,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +jwsims1995,O,O,O,O,X,X,X,O,X,X,X,X,X,X,X,33.333333333333336 +jymaeng95,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +k8440009,X,X,X,X,O,X,O,X,X,O,O,X,X,X,X,26.666666666666668 +kdh9428,O,O,O,O,O,O,O,O,O,X,O,O,X,O,X,80.0 +kdm8939,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +keunyop,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +kgc0120,O,O,X,O,O,O,O,O,O,X,O,O,O,X,X,73.33333333333333 +kimdm1994,X,O,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +kimmy100b,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +kimseungki94,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +kimyuuum,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +kimzerovirus,X,X,X,X,X,O,X,X,X,X,X,X,X,X,X,6.666666666666667 +kingsubin,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +kiss9815,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +kksb0831,O,O,X,O,X,X,X,X,X,X,X,X,X,X,X,20.0 +kongduboo,O,O,O,O,O,O,O,X,O,O,O,O,X,X,X,73.33333333333333 +koreas9408,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +ksj0109188,O,O,O,O,O,O,O,O,X,X,X,X,O,X,X,60.0 +ksundong,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +ku-kim,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +kwakwoohyun,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +kwj1270,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +kys4548,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +kyu9,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +kyungjaejang,O,O,O,X,O,O,O,O,O,O,O,O,O,O,X,86.66666666666667 +kyunyan,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +ldw1220,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +league3236,O,O,O,O,O,X,O,O,X,X,X,X,X,X,X,46.666666666666664 +lee-jemu,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +lee-maru,O,O,O,O,O,X,O,O,O,O,O,O,X,O,X,80.0 +lee82762,X,X,X,X,X,O,O,X,X,X,X,X,X,X,X,13.333333333333334 +leeseowoo,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +leewoooo,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +limyeonsoo,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +lkimilhol,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +loop-study,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +loosie,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +m3252,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +manOfBackend,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +memoregoing,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +messi1913,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +metorg,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +mia0406,X,X,X,X,X,X,X,X,X,X,O,X,X,X,X,6.666666666666667 +mimdong0917,X,X,X,X,O,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +minikuma,O,O,X,X,O,O,O,O,O,O,O,O,X,X,X,66.66666666666667 +mintheon,O,O,O,X,O,O,X,O,O,O,O,O,X,O,O,80.0 +minzzang,X,X,X,X,X,O,O,O,O,X,X,X,X,X,X,26.666666666666668 +miok-jung,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +miseongshin,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +mkkim90,X,O,O,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +mokaim,O,O,O,X,O,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +mongzza,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +monkeyDugi,O,X,X,O,O,O,O,O,O,O,O,O,O,O,O,86.66666666666667 +moo1o,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +morethanmin,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +msmn1729,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +myBabyGrand,O,O,O,O,O,O,O,O,O,X,O,O,O,X,X,80.0 +n00nietzsche,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +nakyeonko,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +nekisse-lee,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +nhs0912,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +nimkoes,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,93.33333333333333 +noah-standard,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +numuduwer,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +ohhhmycode,O,X,O,O,O,O,O,O,O,X,X,X,X,X,X,53.333333333333336 +ohjoohyung,O,O,O,O,O,O,O,O,O,X,X,X,X,X,X,60.0 +ohsg0226,O,X,X,X,X,X,O,O,O,X,X,X,X,X,X,26.666666666666668 +oktopman,O,O,X,O,X,O,O,O,O,O,O,O,X,O,O,80.0 +olivejua,O,O,O,X,X,O,X,O,X,X,X,X,X,X,X,33.333333333333336 +osk2090,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +ows3090,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +pangnem,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +parker1609,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +parkhyunbin9,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +parksil0,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +pej4303,O,O,O,O,O,O,O,O,O,X,O,O,O,O,X,86.66666666666667 +perm4,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +phantom08266,O,O,X,X,X,X,X,X,X,O,X,X,X,X,X,20.0 +pka0220z,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +plmnj2003,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +plzprayme,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +pond1029,O,O,O,O,O,O,O,O,O,O,O,O,X,O,X,86.66666666666667 +positive-choi,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +realizehighly,O,O,O,O,O,O,O,O,O,O,X,X,X,X,X,66.66666666666667 +redbean88,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +reinf92,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +reumongshop,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +reversalSpring,O,X,X,O,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +riyenas0925,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +rkdals213,X,O,O,O,O,O,X,O,O,O,O,O,O,O,X,80.0 +rlatmd0829,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +rockintuna,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +roeniss,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +rshak8912,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +rudus1012,O,X,X,O,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +rumor1993,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +ryeon9445,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +s0w0s,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +saintrealchoi,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,46.666666666666664 +salmon2,X,X,X,X,X,X,O,X,X,X,O,X,O,X,X,20.0 +sangm1n,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +sangw0804,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +sangwoobae,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +sejongdeveloper,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +sellester,X,X,X,X,X,O,X,X,X,X,X,X,O,X,X,13.333333333333334 +seovalue,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +shin-ga-eun,X,X,X,X,O,O,X,X,X,X,X,X,X,X,X,13.333333333333334 +shinnyoung,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +shjang1013,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +sigriswil,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +sinchang1,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +sirena1,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +sjhello,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +sjinjin7,X,X,X,X,X,X,X,O,O,X,X,X,X,X,X,13.333333333333334 +sky7th,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +sojintjdals,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +somcodelead,X,X,X,X,X,X,O,X,X,X,X,X,X,X,X,6.666666666666667 +soojpark91,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +soongjamm,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +soonysoo,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +sophysophysophysophy,O,O,O,X,O,O,O,O,O,O,O,O,X,O,X,80.0 +sowhat9293,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +sowjd,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +soyijang,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +ssayebee,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +ssebong777,X,X,X,X,X,X,O,X,X,X,X,X,X,X,X,6.666666666666667 +sskim91,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +ssonsh,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +star1606,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +stau0444,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +sujl95,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,93.33333333333333 +sungpillhong,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +sunho-lee,O,O,X,O,O,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +sunnynote,O,O,O,O,O,O,O,O,O,X,X,O,O,O,X,80.0 +surfing2003,O,X,X,O,X,X,O,X,X,X,X,X,X,X,X,20.0 +sweetchinmusic,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +tbnsok40,O,O,X,O,O,O,O,O,X,X,O,X,X,X,X,53.333333333333336 +thisisyoungbin,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +tinajeong,O,O,O,O,O,O,O,O,O,O,O,X,X,X,X,73.33333333333333 +tjdqls1200,O,O,O,O,O,X,O,X,X,X,X,X,X,X,X,40.0 +tmdgusya,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +tocgic,X,O,O,O,O,O,O,O,O,O,O,O,O,O,X,86.66666666666667 +twosoull,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +twowinsh87,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,53.333333333333336 +uHan2,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +ufonetcom,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,33.333333333333336 +ventulus95,O,O,O,O,O,O,O,O,O,X,O,X,X,X,X,66.66666666666667 +wannte,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +wdEffort,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +whiteship,O,O,X,X,X,O,O,X,O,X,X,X,X,X,X,33.333333333333336 +wideo2,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +wltnthss,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,20.0 +yallyyally,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +yangseungin,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +yeGenieee,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,93.33333333333333 +yeo311,O,O,O,X,O,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +yhh1056,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +yhxkit,X,X,X,O,O,X,O,X,X,X,X,X,X,X,X,20.0 +ykob501,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,46.666666666666664 +yks095,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +yky03,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,100.0 +yongtaelim,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +yoojaeseon1,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +youngjinmo,O,O,O,O,O,O,O,O,O,X,O,O,X,O,X,80.0 +youngsunshin94,O,O,O,O,O,X,X,X,X,X,O,O,X,X,X,46.666666666666664 +younwony,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,86.66666666666667 +yskkkkkk,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,80.0 +ysmiler,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,93.33333333333333 +yukyeong713,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 +yunieom,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,26.666666666666668 +zeze1004,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,13.333333333333334 +zhaoSeo,O,O,X,X,X,O,O,X,O,X,X,X,X,X,X,33.333333333333336 +zilzu4165,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,6.666666666666667 diff --git a/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/ConsolePrinter.java b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/ConsolePrinter.java new file mode 100644 index 00000000..7548d404 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/ConsolePrinter.java @@ -0,0 +1,18 @@ +package com.example.refactoring._03_long_function._13_replace_conditional_with_polymorphism; + +import java.io.IOException; +import java.util.List; + +public class ConsolePrinter extends StudyPrinter { + + public ConsolePrinter(int totalNumberOfEvents, List participants) { + super(totalNumberOfEvents, participants); + } + + @Override + public void execute() throws IOException { + this.participants.forEach(p -> { + System.out.printf("%s %s:%s\n", p.username(), checkMark(p), p.getRate(this.totalNumberOfEvents)); + }); + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/CvsPrinter.java b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/CvsPrinter.java new file mode 100644 index 00000000..ea1cfa72 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/CvsPrinter.java @@ -0,0 +1,47 @@ +package com.example.refactoring._03_long_function._13_replace_conditional_with_polymorphism; + +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; + +public class CvsPrinter extends StudyPrinter { + + public CvsPrinter(int totalNumberOfEvents, List participants) { + super(totalNumberOfEvents, participants); + } + + @Override + public void execute() throws IOException { + try (FileWriter fileWriter = new FileWriter("participants.cvs"); + PrintWriter writer = new PrintWriter(fileWriter)) { + writer.println(cvsHeader(this.participants.size())); + this.participants.forEach(p -> { + writer.println(getCvsForParticipant(p)); + }); + } + } + + private String getCvsForParticipant(Participant participant) { + StringBuilder line = new StringBuilder(); + line.append(participant.username()); + for (int i = 1 ; i <= this.totalNumberOfEvents ; i++) { + if(participant.homework().containsKey(i) && participant.homework().get(i)) { + line.append(",O"); + } else { + line.append(",X"); + } + } + line.append(",").append(participant.getRate(this.totalNumberOfEvents)); + return line.toString(); + } + + private String cvsHeader(int totalNumberOfParticipants) { + StringBuilder header = new StringBuilder(String.format("참여자 (%d),", totalNumberOfParticipants)); + for (int index = 1; index <= this.totalNumberOfEvents; index++) { + header.append(String.format("%d주차,", index)); + } + header.append("참석율"); + return header.toString(); + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/MarkdownPrinter.java b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/MarkdownPrinter.java new file mode 100644 index 00000000..32e85e5e --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/MarkdownPrinter.java @@ -0,0 +1,50 @@ +package com.example.refactoring._03_long_function._13_replace_conditional_with_polymorphism; + +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; + +public class MarkdownPrinter extends StudyPrinter { + + public MarkdownPrinter(int totalNumberOfEvents, List participants) { + super(totalNumberOfEvents, participants); + } + + @Override + public void execute() throws IOException { + try (FileWriter fileWriter = new FileWriter("participants.md"); + PrintWriter writer = new PrintWriter(fileWriter)) { + + writer.print(header(this.participants.size())); + + this.participants.forEach(p -> { + String markdownForHomework = getMarkdownForParticipant(p); + writer.print(markdownForHomework); + }); + } + } + + private String getMarkdownForParticipant(Participant p) { + return String.format("| %s %s | %.2f%% |\n", p.username(), checkMark(p), + p.getRate(this.totalNumberOfEvents)); + } + + /** + * | 참여자 (420) | 1주차 | 2주차 | 3주차 | 참석율 | + * | --- | --- | --- | --- | --- | + */ + private String header(int totalNumberOfParticipants) { + StringBuilder header = new StringBuilder(String.format("| 참여자 (%d) |", totalNumberOfParticipants)); + + for (int index = 1; index <= this.totalNumberOfEvents; index++) { + header.append(String.format(" %d주차 |", index)); + } + header.append(" 참석율 |\n"); + + header.append("| --- ".repeat(Math.max(0, this.totalNumberOfEvents + 2))); + header.append("|\n"); + + return header.toString(); + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/Participant.java b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/Participant.java new file mode 100644 index 00000000..beef4562 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/Participant.java @@ -0,0 +1,23 @@ +package com.example.refactoring._03_long_function._13_replace_conditional_with_polymorphism; + +import java.util.HashMap; +import java.util.Map; + +public record Participant(String username, Map homework) { + public Participant(String username) { + this(username, new HashMap<>()); + } + + public double getRate(double total) { + long count = this.homework.values().stream() + .filter(v -> v == true) + .count(); + return count * 100 / total; + } + + public void setHomeworkDone(int index) { + this.homework.put(index, true); + } + +} + diff --git a/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/PrinterMode.java b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/PrinterMode.java new file mode 100644 index 00000000..bed718b5 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/PrinterMode.java @@ -0,0 +1,5 @@ +package com.example.refactoring._03_long_function._13_replace_conditional_with_polymorphism; + +public enum PrinterMode { + CONSOLE, CVS, MARKDOWN +} diff --git a/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/StudyDashboard.java b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/StudyDashboard.java new file mode 100644 index 00000000..bf39b8c5 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/StudyDashboard.java @@ -0,0 +1,91 @@ +package com.example.refactoring._03_long_function._13_replace_conditional_with_polymorphism; + +import org.kohsuke.github.GHIssue; +import org.kohsuke.github.GHIssueComment; +import org.kohsuke.github.GHRepository; +import org.kohsuke.github.GitHub; + +import java.io.IOException; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class StudyDashboard { + + private final int totalNumberOfEvents; + private final List participants; + + public StudyDashboard(int totalNumberOfEvents) { + this.totalNumberOfEvents = totalNumberOfEvents; + participants = new CopyOnWriteArrayList<>(); + } + + public static void main(String[] args) throws IOException, InterruptedException { + StudyDashboard studyDashboard = new StudyDashboard(15); + studyDashboard.print(); + } + + private void print() throws IOException, InterruptedException { + checkGithubIssues(getGhRepository()); + new CvsPrinter(this.totalNumberOfEvents, this.participants).execute(); + } + + private GHRepository getGhRepository() throws IOException { + GitHub gitHub = GitHub.connect(); + return gitHub.getRepository("whiteship/live-study"); + } + + private void checkGithubIssues(GHRepository repository) throws InterruptedException { + ExecutorService service = Executors.newFixedThreadPool(8); + CountDownLatch latch = new CountDownLatch(totalNumberOfEvents); + + for (int index = 1 ; index <= totalNumberOfEvents ; index++) { + int eventId = index; + service.execute(() -> { + try { + GHIssue issue = repository.getIssue(eventId); + checkHomework(issue.getComments(), participants, eventId); + latch.countDown(); + } catch (IOException e) { + throw new IllegalArgumentException(e); + } + }); + } + + latch.await(); + service.shutdown(); + } + + private void checkHomework(List comments, List participants, int eventId) { + for (GHIssueComment comment : comments) { + Participant participant = findParticipant(comment.getUserName(), participants); + participant.setHomeworkDone(eventId); + } + } + + private Participant findParticipant(String username, List participants) { + return isNewParticipant(username, participants) ? + createNewParticipant(username, participants) : + findExistingParticipant(username, participants); + } + + private Participant findExistingParticipant(String username, List participants) { + Participant participant; + participant = participants.stream().filter(p -> p.username().equals(username)).findFirst().orElseThrow(); + return participant; + } + + private Participant createNewParticipant(String username, List participants) { + Participant participant; + participant = new Participant(username); + participants.add(participant); + return participant; + } + + private boolean isNewParticipant(String username, List participants) { + return participants.stream().noneMatch(p -> p.username().equals(username)); + } + +} diff --git a/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/StudyPrinter.java b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/StudyPrinter.java new file mode 100644 index 00000000..6992995a --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_03_long_function/_13_replace_conditional_with_polymorphism/StudyPrinter.java @@ -0,0 +1,39 @@ +package com.example.refactoring._03_long_function._13_replace_conditional_with_polymorphism; + +import java.io.IOException; +import java.util.Comparator; +import java.util.List; + +public abstract class StudyPrinter { + + protected int totalNumberOfEvents; + + protected List participants; + + public StudyPrinter(int totalNumberOfEvents, List participants) { + this.totalNumberOfEvents = totalNumberOfEvents; + this.participants = participants; + this.participants.sort(Comparator.comparing(Participant::username)); + } + + /** + * PrinterMode 에 따라서 분기처리 하여 수행했던 작업을 클래스로 만들어서 사용할 수 있다.(다형성) + */ + public abstract void execute() throws IOException; + + /** + * |:white_check_mark:|:white_check_mark:|:white_check_mark:|:x:| + */ + protected String checkMark(Participant p) { + StringBuilder line = new StringBuilder(); + for (int i = 1 ; i <= this.totalNumberOfEvents ; i++) { + if(p.homework().containsKey(i) && p.homework().get(i)) { + line.append("|:white_check_mark:"); + } else { + line.append("|:x:"); + } + } + return line.toString(); + } + +}