본문 바로가기
[ Computer Science ]

[Programming Language] 5. 설계 원칙

by dev charlotte 2024. 10. 31.

효율(Efficiency)

  • 최적화 용이성(Optimizability) = 언어가 얼마나 최적화되어 있는가
    • 실행 효율
      • 프로그램이 실행될 때의 효율성을 높이는 것 목표
      • 빠르고 적은 자원을 사용하는 것이 바람직
    • 번역 효율
      • 코드가 컴파일러나 인터프리터에 의해 빠르게 번역될 수 있어야 함
    • 신뢰성과의 상충
      • 최적화를 위해 성능을 지나치게 중시할 경우, 프로그램의 신뢰성이 떨어질 수 있음
  • 구현 용이성(Implementability)  = 언어 구현의 효율성  / 번역기를 작성할 때 얼마나 효율적으로 구성할 수 있는가
  • 작성 용이성(Writability) = 프로그래밍 언어로 코드를 작성할 때 효율성
    • 표현력(Expressiveness) = 특정한 목표나 기능을 얼마나 간단하고 명확하게 표현할 수 있는가 
  • 판독성(Readability) : 코드가 쉽게 이해될 수 있는가
    • 코드의 구조나 구문이 직관적이어야 함
  • 신뢰성(Reliability) = 언어의 설계가 오류를 줄이고, 예측 가능한 동작을 보장하는가
  • 유지 보수 용이성(Maintainability) = 코드의 유지 및 보수가 얼마나 쉬운가. 유지보수가 쉬우면 코드 수명주기가 길어짐

 

규칙성(Regularity)

  • 통합 정도 = 언어의 기능이 얼마나 조화롭게 통합되어 있는가
    • 특정 구문 사용에 대한 제약 최소화 : 특정 구문에 불필요한 제약이 적고 유연하게 사용할 수 있음
    • 구문 간 상호작용 최소화 : 구문 간 불필요한 상호작용을 줄여 예측 가능한 결과를 얻을 수 있어야 함
  • 일반성(Generality) = 특정 구문을 사용할 때 특별한 경우를 피하고, 관련된 구문을 하나의 일반적인 구조로 통합
  • 직교성(Orthogonality) = 언어의 구문 요소들이 조합되었을 때 의미 있는 형태를 갖도록 / 데이터 타입과 연산자가 직교적으로 설계되면 다양한 조합이 가능 > 유연성 증
  • 일률성(Uniformity) = 비슷한 구문 구조는 비슷한 의미를, 다른 구조는 다른 의미를 가지도록 설계 > 코드의 일관성과 가독성을 높일 수 있음 

 

  • 단순성(Simplicity) = 아인슈타인의 "모든 것은 가능한 한 단순하게 만들어야 하지만 지나치게 단순하게 만들어서는 안 된다." > 지나친 단순화는 오히려 표현력과 작성 용이성 저하 우려
  • 표현력(Expressiveness) = 간결하게 코드를 표현할 수 있는 능력 / 지나치게 높은 표현력은 판독성 저하 우려
    • 예시: C 언어의 while (*s++ = *t++); 구문은 한 줄로 간단하게 표현 / 해석은 복잡할 가능성
  • 확장성(Extensibility) = 사용자가 언어에 새로운 기능을 추가할 수 있도록 유연한 확장 메커니즘을 제공하는 것 중요
    • 언어의 발전 가능성을 높이고, 다양한 요구에 대응 가능해야함