5주차에서는 정말 많은 것을 배울 수 있었다고 생각합니다.
그동안 알지만 놓치고 있었던 부분들에 대해서도 다시 생각해볼 수 있었던 기회였고, 좋은 리뷰어분을 만난 행운이 크다고 생각합니다.
가변성 불변성, 캡슐화 정보은닉
접근제한자와 가변 / 불변을 더 신경써야 합니다. 외부에 공개될 필요가 없는 것들은 private으로 제한해줘야하고, 외부에서는 get 만 가능하고 set은 내부에서만 해주려면 private set을 적극 잘 활용해야 합니다. 또한 backing property도 이를 위한 활용에 속합니다.
객체 스스로의 역할
각 객체마다 아래와 같은 생각을 해봐야 합니다.
- 이 데이터가 외부로 노출되어야만 하는가?
- 내부에서 수행할 수 있지만 외부에 의존하고 있지 않은가?
이는 일급컬렉션의 활용 부문에서 받은 피드백과 유사한 방향입니다. 일급컬렉션으로부터 데이터만 받아서 다른 객체에게 도메인 로직을 수행하고 있다면 잘못된 방식입니다. 예를 들어, Player는 자신의 게임 상태를 스스로 알고 있기 때문에 Player 내부에서 스스로 판단하여 행동하게끔 동작을 위임해야지, 외부에서 Player의 상태에 따라 동작을 결정하는 것은 옳지 않을 수 있습니다.
람다와 고차함수를 활용하면 내가 도메인에서 사용할 View의 함수를 받아서 도메인에서 호출할 수 있도록 위임받아서 사용할 수 있습니다.
이에 대해서는 처음에, "MVC 패턴에서 Model이 View에 의존해서는 안되는데, 결국 Model에서 View 로직을 사용하기 위한 편법이 아닌가?" 라는 생각이 들었습니다. 하지만 이에 대해서는 너무 구체화 하지만 않는다면, 추상화의 개념이기 때문에, 즉 도메인에서는 뷰에 의존하는지 모르기 때문에 괜찮다고 합니다. 하지만 너무 강하게 의존하는 것은 또 지양하는 것 같습니다.
디미터 법칙
'묻지 말고 시켜라'
한 객체가 다른 객체를 너무 많이 알고 있지 않아야 한다는 법칙입니다.
간단하게 말하면 '.' 호출이 많은 것을 지양해야 한다는 방향입니다.
개방 폐쇄 원칙
확장에는 열려있어야 하고, 수정에는 닫혀 있어야 한다는 원칙입니다.
이는 간단하게 말하면 추상화를 활용하라는 개념입니다.
'[우아한테크코스 AN]' 카테고리의 다른 글
[우아한테크코스] 4주차 회고 (0) | 2024.03.23 |
---|---|
[우아한테크코스] 3주차 회고 (0) | 2024.03.23 |
[우아한테크코스] 2주차 회고 (0) | 2024.03.04 |
[우아한테크코스] 1주차 회고 (0) | 2024.03.04 |