ToyProject 1. mentor-review - reply

2022. 11. 1. 14:53

오늘 드디어 첫번째 프로젝트의 코드리뷰를 받았다.

김형진 멘토님께서 알려주신 코드작성의 기본적인 것들에 대해 다시한번 적어가며 정리해본다.

1. Git
사용시 커밋 단위를 작업단위로 쪼개서 커밋하는것이 좋다.
작업 단위로 커밋을 하게되면 특정 작업에 대한 제거 및 취소도 쉬워진다.

▶ 기존에는 커밋을 할때 항상 하루를 마감할때 커밋을 주로 하곤 했다. 앞으로는 작업단위로 끈어서 커밋을 하는 습관을 들이는것이 좋을것 같다.

2. Code
불필요한 코드나 사용하지 않는 코드는 제거하면 좋다.
객체지향 생활체조 원칙을 따라 하다 보면 자연스럽게 객체 지향적인 코드를 작성할 수 있게 된다.
메소드명 이나 변수를 선언 할 때는 어떠한 기능을 하는지 표현해주면 코드의 가독성이 좋아진다..
즉, 메소드명이나 변수명을 정할때 의미를 부여하여 정하되 축약을 하지 말아라.. (Ex. otherList = OK , oList = NO)

▶ 사실 이부분은 변수명을 너무 나만 알아볼수있게 지었다.. 뿐만 아니라 코드 리팩토링 과정에서
필요없게된 코드가 발생되었으나 삭제하지 않고 그냥 과제 제출.. 최종 제출전에 코드를 한번 살펴 보고 정리를 했어야 했는데.. 에이 어짜피 과제인데.. 라는 안일함속에 제출하여 이런 문제가 발생된것 같다. 주의해야겠다.

3. Code 관례
Package 명은 소문자로만 사용하여 작성해야 하고.
Class / Interface 명은 대문자로 시작하며 대문자 카멜 표기법을 사용해야 한다.

▶ 이부분은 잘알고있고 인지 하고 있지만. 변수명 쓰다가 모르고 첫글자 대문자로 간혹 실수를 범하는것 같다...
좀더 신경써야 겠다.

4. 객체지향 생활체조 원칙

1. 한 메서드에 오직 한단계의 들여쓰기만 한다.
2. else 표현을 사용하지 않는다.
3. 모든 원시 값과 문자열을 포장한다.
4. 한줄에 점을 하나만 사용한다.
5. 이름을 줄여 쓰지 않는다. (축약금지)
6. 모든 엔티티를 작게 유지한다.
7. 3개 이상의 스위프트 기본 데이터타입 (Int, String, Double 등) 프로퍼티를 가진 타입을 구현하지 않는다.
8. 일급 콜렉션을 사용한다.
9. getter / setter를 구현하지 않는다.

5. 상속
상속을 구현하면 중복된 코드를 줄일 수 있고, 유지보수가 편리해지지만.
상위클래스의 변화가 모든 하위클래스에 영향을 주며 영향도를 예측하기 힘들다.
interface를 사용해 공통 기능을 제공하고 추상적으로 구현한다면 변경 및 유지보수가 쉬워진다.

▶ 이번 프로젝트에서는 상속이나 인터페이스를 구현하지 않았다. 그래도 기억하자 인터페이스!!

6. 도메인 설계와 책임
클래스를 설계 할 때 어떠한 책임을 가지고 어떤 클래스와 상호작용을 하고 있는지 고민 해보면 좋다.
클래스 설계가 잘되면 높은 응집력과 낮은 결합도를 가지게 되면 변경과 확장에 용이한 설계를 얻게되어
유지보수 및 테스트하기가 좋아진다.

▶ 아직 클래스 설계에 대한 개념은 보이는 부분, 작업이 이루어지는 부분, 데이터 부분 으로 나누었으나..
작업이 이루어지는 부분에 대한 이해도가 좀 떨어졌나보다.. Controller 안에 비지니스 로직과 UI로직이 같이 처리되고 있다고 하심.. 객체의 책임과 역할을 나누고 분리하는것이 어렵다고 하셨다.
고민하는 습관을 가지고 노력하다 보면 나중에는 책임과 역할을 잘 나누는 모습을 볼수 있을거라고 하셨다.

7. 리플렉션
Compile time에 Type, Exception 등의 검증.
리플렉션을 사용하면 Compile Time에 또는 Type, Exception 등 검증이 진행되지 않으며 로직의 동작 흐름을 파악하기
어려우므로 사용을 "지양" 합니다.

▶ 리플렉션이 뭘까 찾아 보았다. 

리플렉션 이란?

구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할수 있도록 해주는 자바 API 라고 함.
대체 이게 무슨말이지..??ㅠ
아직은 이해를 못하여 그냥 기록만 해둔다...