Closed jin5335 closed 4 years ago
구현할
프로그램이 아니라 풀어갈
이야기로 여긴다함수나 변수, 클래스로 표현할 수 있다면 주석을 달지 마라
앞으로 할일
을 TODO 주석으로 남기면 좋음EmployeFactory
구현체를 Employee
상속 클래스마다 구현시키면 오버 엔지니어링일까?
CommisionedEmployeeFactory
-> CommissionedEmployee
public abstract class Employee {
public abstract boolean isPayday();
public abstract Money calculatePay();
public abstract void deliverPay(Money pay);
}
public interface EmployeeFactory { public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType; }
public class EmployeeFactoryImpl implements EmployeeFactory { public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType { switch (r.type) { // 이때 각 new 클래스 들은 위의 Employee abstract class를 상속받은 구현 클래스 case COMMISSIONED: return new CommissionedEmployee(r); case HOURLY: return new HourlyEmployee(r); case SALARIED: return new SalariedEmployee(r); default: throw new InvalidEmployeeType(r.type); } } }
확실히 이 규칙을 지킬 수 있다면 코드읽기가 엄청 쉬워질 듯 하다, 근데 내 코드에 적용은 못하겠음.........
추상화란 구체적인 것을 감추고 보고 싶어하는 전체적인 특성을 드러내는 것이다. 함수는 그 함수의 이름보다 하나더 낮은 수준에서 내부의 코드를 채워주고 있다는 것을 알 수 있다. 다시 그 내부의 코드를 더 깊이 들어가면, 그것 역시도 다른 개념을 추상화시키고 있는 것이며, 계속해서 가장 구체적인 내용이 나올 때까지는 한 수준씩만 더 구체적으로 변화됨을 유추할 수 있을 것이다.
[추상화 수준이 높음] [추상화 수준이 낮음]
getHtml() > String pagePathName = PathParser.render(pagePath) > .append("\n")
과격한 표현 같은데 확실히 코드를 잘 바꾸면 주석이 필요 없어지는 경우가 많은 듯 주석을 달기전에 더 생각해봐야겠다.
나는 모든 주석 잘 안 읽는 편이라 문제,,,,,지만 이 말이 백퍼 이해가 간다. 그치만 일하다 보면 어쩔 수 없이(내 코드 표현력의 한계 때문 만이 아니라도..) 필요한 경우가 생기는 것 같은데 최대한 간결하게 쓰도록 해야겠다.
한 가지만 수행하고 이를 잘 나타낼 수 있는 서술적인 이름의 중복되지 않는 최대한 작은 함수를 만들어라 단, 처음부터 탁 짜지는 건 불가능하다. 글 짓기를 하듯 다듬고 고치고 정리하라 (+단위 테스트 케이스)
끝!!!!
이번 주 발표자
진도
발표자료