최근 객체지향의 사실과 오해라는 책을 읽기 시작하면서 인프런 커뮤니티를 구경하던 도중에 TDD와 객체지향 무료 튜터링 글이 올라온 것을 봐버렸다.
마감!!!
마침 개발을 하면서 객체지향에 대해 진지하게 고민을 하기 시작했고 TDD 기법도 관심은 분명 많았지만 지금 취업한 지 얼마 안 돼서 변명을 하자면 시간이 부족? 해서 아니 스스로 열정이 좀 식었다고 생각을 해서 신청을 하고 튜터링 멘토님께 적극적으로 참여하고 싶다고 표현을 했다 ㅎㅎㅎ...
모던 자바 스터디도 이번에 본인이 만들어서 다음 주부터 진행을 하는데 불붙었을 때 제대로 한번 태워보려고 한다!
- 1회독 하기는 했는데 면접 때 답변도 잘 못했었고 기억에 잘 남지 않아서 2회독하기 위해 스터디를 열었다!
(멘토님도 정말 좋으시고 설명도 너무 잘해주셔서 다음 기수 올라오면 다들 신청해 주시면 좋을 것 같아요! 광고 XXX)
진심으로 참여하고 싶으시면 플러팅 열심히 하세요 전 성공 했네요 ㅋㅋㅋㅋㅋ!
+) 기수마다 연차를 다르게 진행한다고 하십니다.
전 기수인 1기는 2년 차를 기준으로, 이번 기수 2기는 취업준비생, 신입개발자 기준으로 선별하신 거 같아요.. 다음 기수는 잘 모르겠네요 ㅠㅠ.. 그래도 일단 신청 ㄱㄱ!!
그렇게 4명의 멘티? 그냥 스터디원이라고 칭하겠습니다.
4명의 스터디원이 모였지만, 한 분께서 개인적인 사정으로 인해 시작도 전에 나가셔서 3명이서 진행하게 됐다.
사람이 많을수록 더 다양한 의견을 들을 수도 있다 생각하지만.. 좋은 게 좋은 거라고! 생각했다.
그렇게 11월 26일 일요일 11시에 강남역 트레바리에 모여서 튜터링을 시작했다 (대략 두 시간 진행)
그리고.. 솔직히 말하면 민망하게도 멘토님을 제외한 모든 인원이 조금씩 지각을 했다..(정말 죄송합니다..ㅠㅠ..)
암튼!! 튜터링을 시작하고 처음으로 간단하게 자기소개를 시작했다.
멘토님께서 먼저 소개를 해주셨는데 모 기업의 테크리더를 맡으시며 중학생 때부터 개발을 시작하셔서 지금까지 꾸준히 개발을 하셨다고 한다.. 정말 대단하시다..
그리고 이 튜터링을 하시는 이유를 여쭤봤는데, 교육의 평등화를 말씀해 주셨다..! 좋은 기회 정말 감사드립니다 :)
그리고 이제 스터디원들이 각자 소개를 했는데,
본인을 제외하고는 이제 한분은 LG님 한분은 ASUS님이라고 부르겠습니다. (사용하고 계신 노트북 기준으로 ㅎㅎ...)
LG님께서는 전공을 하셨고, 여러 취업 연계도 진행하셨으며 결국 SI회사에 다녀보고 퇴사를 해서 다시 취업준비를 한다고 하셨다! 원래는 파이썬으로 언어를 공부하시다가 아무래도 자바가 취업시장이 더 넓고 하니깐 자바 스프링으로 공부를 하고 계신다고 한다. 공부도 열심히 하시고 대외활동도 열심히 하시는 분이셨다..
그리고 본인은 비전공자로, 다른 직종에서 근무를 하다가 취미로 개발을 시작했는데 재미있어서(진짭니다.) 바로 퇴사를 하고 정규과정 학원에서 6개월 코스를 수료하고, 모 기업의 테크리더와 프런트앤드를 준비하는 지인 두 명과 함께 1년간 오피스텔을 계약해서 작업실을 만들어서 개발 공부를 본격적으로 시작했다..! 그러고 단순 금전적인 문제로 SI에 급하게 취업하긴 했는데.. 스택도 맞기 않고 본인이 생각한 환경과 맞지 않아 다시 이직 준비를 하고 있다고 소개를 했다..!
ASUS님께서는 전공자는 아니시고, 졸업하고 방황(?!)을 하시다가 부트캠프를 다니고 계신다고 한다.. 그리고 가장 충격적인 건 수학을 좋아하신다고.. 세상에나..ㅠㅠ 아직 공부하신 지 오래되신 분은 아니어서 제대로 소개를 못 드리겠지만.. 적성에도 잘 맞는 거 같아서 더 열심히 하고 싶다고 하신다..!
자기소개 및 개인적인 궁금함을 끝마치고 바로 객체지향에 대해서 얘기를 해보고자 한다.
(생각보다 시간이 오래 소요됐다..)
서로가 생각하는 객체 지향이 뭔지 자유롭게 얘기를 나누었다..! 객체지향이란 무엇일까?
우선, 객체 지향은 한 소프트웨어에서 유기적으로 행위를 하는 것이다. 가 나왔는데 여기에 대해서 그럼 유기적으로 행위를 하지만 제약을 둬야 하는 경우는 어떤 경우가 있을까에 대해 추가 의견이 나왔다.
그래서 너무 당연한 얘기지만 객체 지향은 현실 세계를 본 뜬것이다. 예를 들어서 눈에 보이는 객체들이 여러 가지가 있는데 각자의 역할은 분명하게 정해져 있는 것 같다. 예를 들어서 여기 의자가 있는데 이 의자는 상태는 높이는 이렇고 무게는 이렇게 다양할 수 있지만 앉기 위해서 만들어진 거다. 몰론, 레슬링이나 영화에서는 체어샷으로 사용할 수 있겠지만 통상적으로는 앉기 위해 사용된다! 그래서 이런 제약 조건이 결국 유기적으로 행위를 하지만 자연스럽게 제약이 생기지 않을까 하는 의견을 냈다 ㅎㅎㅎ..
더 하고 싶은 말이 있지만.. 뒤에 이어서 작성해 보겠다..
그리고 객체 지향의 기본적인 4가지 캡상추다가 나왔다. 캡슐화, 상속, 추상화, 다형성..!
이 네 가지 분명 중요하다. 하지만 이 캡상추다가 진짜 객체지향일까? 이런 질문을 해주셨다!
개인적인 생각으로 저 네 가지를 지키지 않아도 객체지향이라고 생각을 한다.
캡슐화, 상속, 추상화, 다형성을 지키면 개발 생산성 향상 및 유지보수에 도움이 되는 것 그리고 객체지향을 더 완벽한 객체지향으로 만들어 주는 거라고 생각한다.. 지극히 개인적인 생각입니다...
왜냐하면 객체 지향이 교과서에 나와있는 건 현실 세계를 본떠서 만드는 것이라고 하는데 저 네 가지를 지키지 않아도 솔직히 객체지향이다. 단순하게 객체를 만들고 객체에 메시지를 주고 행위를 하고 불라불라~ 기 때문이다!
다음으로는 진짜 실무에서 잘 이행하고 있는지 캡슐화 잘 지켜본 적이 있는지.. 게터 세터가 무엇인지 이게 정말로 정보 은닉을 하고 있는 건지.. 에 얘기가 나왔다.
단순 기억으로만 작성하려고 해서 힘들긴 하지만... 세터 대신에 생성자를 사용한다고 얘기가 나왔는데, new 키워드를 사용해서 생성자를 사용하면 힙 메모리의 공간을 할당해 주는 거 기 때문에 무분별하게 사용하는 거보다는 적절하게 사용하는 것이 좋을 거 같다고 의견을 냈다.
꼭 필요한 경우나 명시적인 표현이 필요한 경우에는 사용하는 것이 좋다고 생각하긴 한다..!
그리고 본인은 세터의 경우는 잘 사용하지 않는다.
크게 사용 의도를 파악하기 힘들고, 값의 일관성을 유지하기 어렵기 때문이다.
자바 빈에서 세터는 퍼블릭 제어자를 사용한 곳에서 모두 접근할 수 있기 때문에 의도치 않게 값이 변경될 수 있는 위험이 있다. 그리고 생성자를 사용하는 것보다 빌더를 사용해서 많은 생성자를 사용할 필요 없고 setter의 사용을 줄일 수 있기 때문에 빌더 패턴을 사용하는 편이다.
마지막으로 책임이 무엇인지에 대해 얘기를 해보았다. 이 내용은 솔직히 어떤 대화가 오갔는지 기억이 나지 않아서, 제 개인적인 지식으로 작성하겠습니다..ㅠㅠ 추후에 확인 후 내용 수정 하겠습니다..!
객체 지향 설계 기법에서 책임 주도 설계라는 게 있다.
유기적으로 협력이 필요한 책임들을 식별하고 그 책임이 적절한 객체에 할당하여 프로그래밍을 설계하는 방법론이다.
해당 서비스가 유저(사용자)에게 제공해야 하는 기능(책임)을 기획 및 파악합니다. 그리고 그 기능 및 책임을 세분화시켜 적절한 객체에 해당 기능을 할당해 줍니다. 그리고 객체가 기능을 수행하는 중에 다른 객체의 기능이 필요한 경우 이 기능을 책임질 적절한 객체를 만들어줍니다.
그렇게 함으로써 해당 객체와 유기적으로 도움을 줄 객체가 서로 협력하게 됨으로써 책임 주도 설계 방법론이 완성이 된다.
객체지향에 대해 간단한 토론?이 끝난 후에 객체지향을 적용시킨 간단한 라이브 코딩을 했다.
글이 너무 길어지면 지루할 수 있으니 다음 게시글에 이어서 봐주시면 감사하겠습니다 :)
절대 본인이 시간도 늦고 귀찮아서 그런거 맞아요 네.. 저 잘겁니다
빠른 시일 내에 글 이어서 작성하겠습니다 ! ㅋㅋㅋㅋㅋ
'Tutoring' 카테고리의 다른 글
[튜터링] 객체지향과 TDD 기법 E.02 (자기소개 및 객체지향 라이브 코딩) (1) | 2023.12.02 |
---|