<일기>
두드러기는 여전하다. 희미해지기는 했는데 그래도 그대로다.
오늘부터 팀과제가 시작됐다. 주제는 둘 중 선택하는 거였는데, 하나는 기존에 개인 과제로 했던 키오스크를 조금 더 발전시키는 거였고, 다른 하나는 호텔 예약 시스템을 만드는 거였다. 우리 팀은(팀은 바뀌지 않았다) 호텔 예약 시스템을 하기로 했다. 팀원들이 아직 자바에 익숙치 않아서 기존에 했던 걸 더 고치고 발전시키기 보다 프로젝트 자체를 더 많이 해보는게 도움이 많이 될 거라 판단했다.
우리팀 성골(컴공이란 뜻) 분이 주제가 나오고 조금 있더니 대충 객체 관계 짜봤다며 보여줬는데 어떻게 대충 짠거냐고~ ㅋㅋ 바로 거기서 팀끼리 의논하고 내가 대충 정리한 요구사항 정의서를 참고해 설계했다. 밤까지 계속 달려서 성골님이 인터페이스까지 대충 짜두었고, 거기서 각자 맡은 부분에서 더 추가/수정 해야할 부분만 바꾸고 작업을 찬찬히 시작했다.
오늘은 아침에 시간 쪼개서 객체지향의 사실과 오해 2장을 읽었고, 밤에는 테스트 주도 개발 시작하기 책을 2장까지 읽었다. 어제 TDD책 입문서 괜찮은 거 있냐고 슬랙에 물어봤는데 아무도 답변이 없어서 냅다 샀는데 밤에 튜터님이 아직 그거 할 단계가 아니라 구매를 비추했지만, 그래도 밸덩 추천해주며 어떻게 공부해가면 좋을지 감잡도록 도와줬다. 하지만 이미 사버려서,, 오늘 읽어보니 재밌고 신기하다. 맨날 강의에서 알려주는 거면 어깨너머로 배웠는데 이제야 제대로 배우네.!
</일기>
프로젝트 설계를 조금 보여주자면 아래와 같다.
이렇게 내가 요구사항들을 정리해서 유스케이스로 만들었고, 성골좌님이 캔버스에다가 깔끔하게 만들어 주었다. 배경색 있는 건 각자 업무 분담!
나는 호텔서비스와 보안 관리자를 맡았다. 벌써 커밋 수가 52개일 정도로 다들 열심히 하고 있다,, 파이팅..!
그리고 테스트 주도 개발 시작하기 책을 읽고 따라쳐보는 레포도 만들었다. 이거도 틈틈히 봐서 지금 하는 팀과제에 적용해보면 좋을 것 같다!!
https://github.com/lycoris62/TDD-basic
오늘은 일단 객사오 2장 정리했던 걸 보여주자면,
02. 이상한 나라의 객체
객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다.
객체지향과 인지 능력
객체지향 패러다임은 인간이 인지할 수 있는 다양한 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어의 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다는 믿음에서 출발한다. 그러나 현실 세계와 소프트웨어 세계 사이의 유사성은 여기까지일 뿐이다. 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 현실 세계를 기반으로 새로운 세계를 창조하는 것이다. 소프트웨어 세계의 전등은 스스로 불을 켜거나 끈다.
객체, 그리고 소프트웨어 나라
객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자(identity), 특징적인 행동(behavior), 변경 가능한 **상태(state)**를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
상태
객체가 주변 환경과의 상호작용에 어떻게 반응하는가는 그 시점까지 객체에 어떤 일이 발생했느냐에 좌우된다. 즉 어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다.
하지만 과거에 발생한 행동의 이력을 통해 현재 발생한 행동의 결과를 판단하는 방식은 복잡하고 번거로우며 이해하기 어렵다. 따라서 행동의 과정과 결과를 단순하게 기술하기 위해 상태라는 개념을 고안했다. 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있다. 복잡성을 완화하고 인지 과부하를 줄이는 중요한 개념이다.
그러나 세상에 존재하는 모든 것들이 객체인 것은 아니다. 인식할 수 있음에도 객체의 영역에 포함시킬 수 없는 것들도 존재한다. 숫자, 문자열, 양, 속도, 시간, 날짜, 참/거짓과 같은 단순한 값들은 객체가 아니다. 단순한 값들은 그 자체로 독립적인 의미를 가지기 보다, 다른 객체의 상태를 표현하기 위해 사용된다.
때로는 단순한 값이 아니라 객체를 사용해 다른 객체의 상태를 표현해야 할 때가 있다. 객체가 다른 객체와 연결돼 있는지 여부로 표현하면 된다.
결국 모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다. 이때 **객체의 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티(property)**라고 한다. 일반적으로 **프로퍼티는 변경되지 않고 고정되기 때문에 “정적”**이다. 반면 **프로퍼티 값(property value)은 시간이 흐름에 따라 변경되기 때문에 “동적”**이다.
객체 사이의 연결을 선으로 표현하는데 이렇게 **객체와 객체 사이의 의미 있는 연결을 링크(link)**라고 한다. 객체와 객체 사이에는 링크가 존재해야만 요청을 보내고 받을 수 있다. 즉, 객체의 링크를 통해서만 메시지를 주고받을 수 있다.
'TIL ✍️' 카테고리의 다른 글
23년 10월 26일(목요일) - 18번째 TIL (1) | 2023.10.26 |
---|---|
23년 10월 25일(수요일) - 17번째 TIL (1) | 2023.10.25 |
23년 10월 23일(월요일) - 15번째 TIL (2) | 2023.10.23 |
23년 10월 20일(금요일) - 14번째 TIL (1) | 2023.10.20 |
23년 10월 19일(목요일) - 13번째 TIL (0) | 2023.10.19 |