원칙 프로그래밍 가이드 라인

OCP(Open-Closed Principle)

코드는 확장에 열려 있고 수정에 대해서는 닫혀있는 2가지 속성을 동시에 충족하도록 설계한다. 확장에 대해서 열려있다는 말은 코드의 동작을 확장할 수있다는 의미이다. 수정에 대해서 닫혀 있다는 말은 코드의 동작을 확장하더라도 그 밖의 코드는 전혀 영향을 받지 않는다는 의미이다.

코드의 변경에 유연하게 대응한다.

어떤 소프트웨어든 계속 살아 있는 한 변화한다. 더구나 소프트웨어의 수명은 예상보다 길어지는 경향이 있다. 변화의 노출 되어도 장기적으로 안정된 소프트웨어를 설계해야 한다. 경직된 설계는 깨지기 쉬운설계 코드에 인터페이스를 사용해서 설계하자

OCP의 적용범위

모든부분에 적용을 하는것은 코드만 복잡해 진다.

OCP를 구현하는 대표적인 기술이 객체지향의 다형성이다.

GRASP (General Responsibility Assignment Software Patterns or Principles) 책임할당 패턴? 원칙?

패턴인가 원칙인가?

  1. Controller
  2. Creator
  3. High cohesion
  4. Indirection
  5. Information expert
  6. Low coupling
  7. Polymorphism
  8. Protected variations
  9. Pure fabrication

Naming is important

코드에서 명명은 가장 중요한 과제

적절한 이름을 붙일수 있으면 해당 요소가 달성 해야할 역활에 대해서 프로그래머 자신이 충분히 이해 했다는 뜻. 코드는 읽는 사람이 작성한 사람의 대화이다 이름이 적절하지 않으면 코드상의 대화가 성립되지 않는다. 이름은 코드를 읽는 사람의 UI다.(코드 암호화에 이름을 이상하게 바꾸는 경우도 있다)

코드를 작성하기 전에 이름을 먼저 정하자

  1. 이름을 짧은 주석이라고 생각하자.
  2. 이름을 오해받지 않도록한다. 오해를 줄이기 위해 프로그래밍 언어의 관행을 알고 거기에 익숙해지는것이 필요
  3. 이름이 효과와 목적을 설명하도록한다. 수단으로는 언급하지 않는다.
  4. 이름을 스스로 점검해보고 싶으면 테스트 코드를 작성하자.
  5. 이름은 발음 가능한것으로 한다.
  6. 이름은 검색 가능하도록 붙인다.

마인트 매핑을 회피

한글자 짜리 이름을 정하면 해당 이름이 어떤 정보를 가지고 있는지 코드를 가지고 계속 생각해야 하는데 그런것이 읽는 사람을 과부화 시킨다.

루프백 확인

명명에 이름 가역성이라는 개념이 있다. 이름이란 명명의 기반이 된 내용의 설명문을 복원할수 있어야 된다.

설명 -> 이름 -> 설명순으로 한바퀴 돌았을때 그래도 이름이 설명과 일치하면 좋은 이름이다.

참조