각종 후기/우아한테크코스

[우아한 테크코스 3기] LEVEL 1 회고 (14일차)

제이온 (Jayon) 2021. 2. 15.

안녕하세요? 제이온입니다.

 

연휴가 끝나고 처음 맞이하는 월요일입니다. 하지만, 수업도 없었고 이미 1차 미션은 끝냈기 때문에 쭉 자습을 하는 하루였습니다.

 

 

데일리 미팅

월요일은 오후 1시부터 시작이라서 1시부터 30분간 데일리 미팅을 진행하였습니다. 오늘의 말하기 주제는 '연휴동안 무엇을 하였는가?'였습니다. 저는 계획하였던 테코톡 주제를 공부하여 블로그 포스팅, '객체지향의 사실과 오해' 독서 및 깃허브 정리를 수행하였다고 말하였습니다. 주변 크루들도 공부하였던 사람도 있었고, 잘 쉬었던 사람도 있었습니다.

 

대부분 잘 놀았다는 사람이 많았는데, 그럼에도 아예 논 사람은 없던 것 같습니다 ㅋㅋㅋㅋ 역시.. 다들 열심히 해서 그런지 꾸준히 공부를 하는 것이 습관이 잡히신 듯 하였습니다.

 

 

테코톡

저는 지난주 5일 간 JCF에 대한 블로그 포스팅을 올렸었습니다. 목요일에 발표고, 내일은 새로운 미션을 수행해야하는 날이므로 많이 바쁠 것 같아서 오늘 ppt와 대본을 모두 만들어야겠다고 생각하였습니다.

 

원래는 블로그 포스팅에서 공부를 열심히 한 내용을 전부 담고 싶었지만, 10분 정도라는 발표 시간 제한때문에 어느 정도 생략을 할 수 밖에 없던 점이 아쉬웠습니다. 그럼에도 표지 포함하여 31페이지가 나왔고.. 대본도 나름 짜긴 하였는데 시간을 맞출 지는 모르겠습니다. 내일부터 남는 시간에 한 번씩 모의 발표를 해 보면서 시간을 맞춰나가야겠습니다.

 

 

SOLID 스터디

저번 주에 손너잘이 SOLID 원칙에 대해 토론하는 스터디를 열었습니다. 저는 SOLID 라는 것을 들어만 봤고, 정확히 무엇인지는 알지 못하였습니다. 그래서 저는 여기서 뭔가 생산적인 이야기를 하기보다는 사람들의 다양한 의견을 들으면서 개념을 다지기 위하여 스터디에 참가하였습니다.

 

조를 나누어서 토론을 하는데, 제가 속한 조는 2조였고 S, I, D를 공격하고 O, L을 방어하는 역할을 맡았습니다. 각각 2개씩 질문을 하였고, 1조에서 잘 반론을 해 주었습니다. 우리 조 또한 공격받은 답변을 바람직하게 말하였다고 생각합니다.

 

아래는 방어 토론 내용입니다.

 

 

<OCP>  
1. 변화가 별로 없을 때도 이를 지켜야하는가?
-> 변화가 없다는 전제가 있다면 SOLID는 의미가 없다.



2. OCP를 적용하다보면 데코레이터나 프록시패턴으로 구현하게 되는 경우가 있을텐데 오히려 프로그램의 복잡도가 증가하지 않나요?
-> DIP도 계층적으로 깊어지면 어떻게 되는가?

 



<LSP>
1. OCP를 잘 하면 LSP도 지키는 것 아닌가? 그러면 필요 없는 규칙이 아닐까?
-> OCP를 추상클래스를 통해 구현한다고 해도, 하위 객체가 상위객체 역할을 대신해준다는 것과 OCP와는 관계가 없다고 생각한다.

(번외) 부모와 자식 상속 개념도 우리를 헷갈리게 한다. 할아버지 - 아버지 - 딸을 생각해보자. 아버지와 딸은 부모자식  관계이지만, 사실 클래스의 관점에서 생각해보면 아버지의 역할을 딸이 대신할 수 없다. 상속 개념은 '자식 is a 부모'로 이해하여야 하는게 아니라 '자식 kind of 부모'여야 한다.

 

 

아래는 공격 토론 내용입니다.

 

 

<SRP>
1. 컨트롤러를 예를 들었을 때 하나의 책임을 지니고 있는건 아니지 않은가?
책임이라는 게 단위가 어떻게 되는것인가?


2. 책임이란 것은 모호하다.
음식을 먹는다, 라는 책임을 한가지라고 볼수도 있지만 씹는다, 삼킨다, 녹인다 등으로 세분화할 수도 있기 때문이다.
추상화 단계에 따라 달라질텐데, 책임 기준을 사람마다 다른데 이게 모두에게 적용할 수 있는 원칙이 될 수 있을까?
-> (1, 2) 책임이라는 단위가 정해져 있다고 생각하지 않는다. 사람마다 다르게 나눌 수 있다. 

 



<ISP>
1. 잘게 쪼개다 보면 인터페이스가 너무 많아진다. 해당 파일 관리나 implements 관리를 어떻게 할 것인가?
-> 적절한 수준에서 제어하여 잘 쪼개야 한다.


2. 인터페이스를 분리하는 기준이 모호하다 어떤기준으로 해야하나
-> 책임에 따라 분리해야 한다.

 



<DIP>
1 .컴파일 타임에 하지않고 런타임에 하는것에 대해 ... 뭐가 주입될지 모를텐데 어떤게 수행될지 모르는 것은 위험하지 않은가?
-> 개발 쪽에서 생각하기보다는 보안 쪽에서 생각할 문제가 아닌가?



2. 너무 먼 미래를 보고 코딩하는게 아닌가? (오버엔지니어링)
-> 패키지 분리할 때도 많이 사용함. 한 쪽 패키지가 다른 패키지에 의존하여 결합도가 지나치게 높아질 수 있다.
-> product뿐만 아니고 Test 코드생산에도 신경을 써야하는데 DIP가 Test코드 작성할때도 도움을 줄 수 있다.

 

 

사실 SOLID 자체가 처음이다보니까 크루들의 답변을 이해하지 못하는 경우도 많았고, 그나마 이해한 부분에 대해서만 기록한 것이라 토론에 참여한 크루가 살짝 의아할 부분도 있을 것 같습니다 ㅎㅎ..

 

SOLID 개념이 더 있었다면, 저도 건설적인 대화에 참여할 수 있었겠지만, 이번 스터디를 통해서 SOLID의 개념 정도는 익힐 수 있게 되었고 다양한 크루의 생각을 들을 수 있는 좋은 기회였다고 생각합니다. 이번 스터디를 웨지가 잘 정리하였다고 하니, 이곳에서 전문을 참고하셔도 좋을 듯 합니다.

 

 

정리

오늘은 테코톡 준비와 스터디 참여로 정신 없는 하루였습니다. 내일부터는 이제 TDD와 새로운 로또 미션을 배우게 되는데 성실하게 임해서 실력을 키우는 계기가 되었으면 합니다.

댓글

추천 글