Detail
IT/Other

프로그래밍 원칙 & 법칙

by 추쿠아비 2021. 6. 3.

보이스카우트 원칙 (The Boy Scout Rule)

보이스카우트가 오기 전보다 돌아갈 때 그 자리를 더 깨끗하게 한다는 규칙. 소프트웨어 개발에서는 모듈을 체크인할 때, 반드시 체크아웃할 때 보다 아름답게(깨끗하게) 한다는 규칙을 의미한다.


브룩스의 법칙 (Brooks' law)

지연된 프로젝트에 추가 인원 투입은 프로젝트를 더욱더 지연되게 할 뿐이다라는 법칙. 바꿔 말하면 임산부를 9명 더 모아도 아기를 한 달 만에 출산할 수 없다고 비유하기도 한다. 이 법칙의 성립을 설명하기 위해 프로젝트 적응에도 시간이 걸린다는 것커뮤니케이션 코스트가 증가한다는 것을 들기도 한다.


콘웨이의 법칙 (Conway's law)

시스템을 설계하는 조직은 그 조직의 커뮤니케이션 구조를 그대로 복사한 설계를 만들어 낸다라는 원칙.

 

Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.
— M. Conway

 

최근 연구에서도 실제로 조직 구조가 소프트웨어 품질에 가장 영향을 준다는 연구 결과도 나와 있다.


디미터/데메테르 법칙 (Law of Demeter, LoD)

최소지식의 원칙 (Principle of Least Knowledge) 이라고도 부른다. 협력하는 객체의 내부 구조에 대한 결합으로 인해 발생하는 설계 문제를 해결하기 위해 제안된 원칙. 간단히 말하면 객체의 멤버 프로퍼티를 직접 건드리지 않도록 하는 것이다.

 


호프스태터의 법칙 (Hofstadter's_law)

그 일은 항상 당신이 예상한 것보다 더 오래 걸린다, 비록 호프스태터의 법칙을 고려했다고 해도 말이다.

놀람 최소화 원칙 (Principle of least surprise, POLA)

인터페이스 설계의 유저빌리티와 관련된 원칙이다. 인터페이스의 두 가지 요소가 서로 모순 혹은 명확하지 않을 때 유저 혹은 프로그래머가 가장 상식적인 (놀람이 가장 적은) 것을 선택한다는 사고방식.


위쓰의 법칙 (Wirth's Law)

유명한 수학자이자 컴퓨터공학자인 Niklaus Wirth가 주창한 내용으로 "소프트웨어는 하드웨어가 빨라지는 것보다 더 빨리(급하게) 느려진다" 라는 이야기이다. 계산 자원이 풍족해지면 생산성을 돕는 프레임워크도 부가적으로 진화해서 리소스를 소비하기 때문에 하드웨어가 진화해도 소프트웨어 속도는 변하지 않는 것처럼 느껴진다는 느낌적인 느낌.

 

Software is getting slower more rapidly than hardware is becomes faster.

DRY 원칙

Don't Repeat Yourself의 약자. 같은 걸 반복하지 마 라는 뜻.
DRY 원칙이 잘 적용된 시스템은 특정 요소를 변경해도 논리적으로 관련 없는 요소에 영향을 주지 않는다. 나아가서 논리적으로 관련된 요소는 예측이 가능한 범위내에서 일률 변경되어 동기가 유지된 상태가 된다.


KISS 원칙

Keep it simple, stupid의 약자. 단순하게 해. 바보야라는 뜻.
이 원칙의 기원이라 생각되는 비슷한 개념이 몇 개 더 있다.

오컴의 면도날
경제성의 원리, 검약의 원리, 단순성의 원리


레오나르도 다빈치
단순함은 궁극의 세련됨이다.


생텍쥐페리
완벽이란 더이상 더할 수 없는 것이 아니라 더는 깎아 낼 수 없을 때 달성되는 것 같다.


알버트 아인슈타인
뭐든지 가능한 한 단순한 것이 좋다. 단 너무 단순해선 안 된다.


SOLID 원칙

객체 지향 설계 5대 원칙의 앞글자를 따서 SOLID 라 부름.

 

  • Single responsibility (단일 책임 원칙)
  • Open–closed (개방 - 폐쇄 원칙)
  • Liskov substitution (리스코프 치환 원칙)
  • Interface segregation (인터페이스 분리 원칙)
  • Dependency inversion (의존 역전 원칙)

YAGNI

You ain't gonna need it의 약자. 그건 아마 필요 없을껄이라는 뜻. 익스트림 프로그래밍(XP)과 관련된 격언으로 필요해질 때까지 구현하지 말라는 뜻이다.


by Unsplash.


728x90

댓글