hyperskill - Code organization. Design principles 영어 원문
소프트웨어를 생성하는 것은 엔지니어링과 비슷합니다 : 만약 중요한 부분이 부서진다면, 모든 것이 실패합니다.
우리는 이러한 재앙을 어떻게 예방 할 수 있을까요?
당연하게도, 우리는 프로그램을 테스트 할 수 있지만, 충분한가요?
모든 테스트들을 통과한 프로그램도 여전히 다른 문제들을 가지고 있습니다.
- 나쁜 디자인(구조) 를 가지고 있을 수 있어서, 누구도 사용하지 않을 수도 있습니다.
- 이 프로그램이 어떻게 작동하는지 이해하기 어려워서 어떠한 부분도 확장할 수 없거나, 새로운 기능을 추가 할 수 없습니다.
이번 주제에서는, 우리는 프로그램의 내부 디자인(구조) 에 대해서 말할 것이며,
시간이 지나 우리는 향상시키고 진화하는 것에 대해 말할 겁니다.
Program design - 프로그램 디자인
모든 프로그램들은 데이터를 조종합니다.
모든 프로그램들은 서로 다르지만, 이러한 프로그램들을 데이터 파이프라인으로서 생각 해 봅시다 :
프로그램은 몇 가지 입력을 받고, 이를 가공하며, 몇 가지 결과물을 생산합니다.
프로그램은 마치 미로와 같습니다.
데이터는 하나의 함수에서 또 다른 함수로 가며, 계속됩니다.
그리고 마지막에서는, 결과를 얻습니다.
이건 마치 우리가 데이터를 조종 할 수 있는 것 처럼 보입니다만,
만약 우리의 방식에 장애물이 있다면, 복잡한 문제를 마주 할 것 입니다ㅏ.
직선적인 경로로 움직이는 것은 복잡함이 자라나는 것으로부터 우리를 구해주지 못합니다.
하지만, 프로그램은 서로 다른 구조를 가질 수 있습니다. :
우리는 데이터 경로들에 대한 다양성을 유지하고 있지만,
코드를 정리하는 것은 다릅니다.
우리는 프로그램에 대한 또 다른 디자인을 가졌다고 말할 수 있습니다.
프로그램의 디자인은 주요한 목표들을 성취하기 위한 코드 구조를 정리하는 방식입니다.
좋은 디자인을 만들기 위해 처음부터 시작하는 것은 쉽지 않습니다.
그리고 우리는 종종 요구사항에 대한 모든 것을 알지 못합니다.
우리가 확실히 할 수 있는 것은 가이드라인과 규칙들을 따라서 디자인을 더 효과적이고 깔끔하게 만드는 것 입니다.
만약 당신이 수백 줄의 코드인 코드 베이스에서 작업하고 있다면,
당신은 선호하는 어떠한 디자인으로든 시작 할 수 있습니다.
생각하지 않고 초라하게 내린 디자인 결정은 당신에게 있어 거대한 문제로 될 겁니다.
Design principles - 디자인 규칙
우리가 이미 알고 있듯이, 어플리케이션들은 디자인을 가지고 있습니다만,
어떤 디자인이 어플리케이션을 만드는 데에 도움이 될까요?
Design principles (디자인 규칙) 들은,
당신의 프로그램의 디자인에 대한 더 좋은 결정을 내리도록 가이드 해 주는 규칙입니다.
당신은 코드의 어떠한 부분에 추가하거나 업데이트 하고 싶을 때 가이드를 참조 할 수 있습니다.
이러한 규칙 중 일부는 대부분 평범한 상식으로부터 옵니다 :
- Don't Reat Yourself (DRY) - 같은 말을 반복하지 마
- You Ain't Gonna Need It (YAGNI) - 너에게 필요한 작업이 아니야
- Keep It Simple, Stupid (KISS) - 간단함을 유지해, 바보야 (실제 뜻임)
당신이 생각하듯이, DRY 규칙이 의미하는 바는,
한 곳에서 다른 곳으로 코드를 복사하는 것 보다, 코드를 재사용 하는 것이 낫다는 겁니다.
YAGNI 는 당신이 필요한 작업한 하며, 필요하지 않은 모든 것들을 하지 말라는 겁니다.
KISS 는 더 나은 이해를 위해 코드를 간단하게 만들라는 의미입니다.
모든 규칙들이 배우기에 쉬운 것은 아닙니다.
이들 중 일부는, GRASP (General Responsibility Assignment Software Patterns) 와 같으며,
이는 많은 디자인 패턴들이 담겨있는 전체적인 에코시스템입니다.
그리고 대부분은 object-oriented-programming (OOP) - 객체지향 프로그래밍에 준수합니다.
또 다른 규칙들은 어떠한 추가적인 지식을 포함하지 않지만,
이러한 규칙들의 의미와 중요성을 이해하는 데에는 시간이 걸립니다.
SOLID 라는 약어 뒤에 숨어있는 다섯 가지 소프트웨어 디자인 규칙들을 살펴 봅시다.
SOLID - SOLID 규칙
당신의 프로그램을 디자인 할 때 따라야 하는 만장일치된 디자인 규칙은 없습니다. 왜일까요?
왜냐면 프로그램이 성장하면서, 더 복잡해지기 때문입니다.
당신은 서로 다른 접근법에 익숙 해 질 필요가 있는데,
이는 당신의 프로그램에 서로 다른 종류의 복잡성을 관리하는 데 도움을 주기 위함입니다.
우리의 목표를 부드럽게 가기 위한 경로를 만들기 위해,
SOLID 디자인 규칙들에 의존 할 수 있습니다.
SOLID 내의 각각의 문자는 별개의 디자인 규칙들에서 참조합니다 :
- SRP : Single Responsibility Principle - 단일 책임 규칙
- OCP : Open-Closed Principle - 개방 폐쇄 규칙
- LSP : Liskov Substitution Principle - Liskov 치환 규칙
- ISP : Interface Segregation Principle - 인터페이스 분리 규칙
- DIP : Dependency Inversion Principle - 의존성 역전 규칙
SOLID 라는 용어 뒤에 이러한 세계가 있습니다!
각각의 원칙들은 다른 것들로부터 독립적이지만,
이러한 원칙들을 함께 적용하는 것은 당신의 디자인에 대해 시너지로 작용합니다.
SOLID 규칙들은 당신의 코드를 정리하는 데 도움을 주는데,
이 방식은 SOLID 규칙에 익숙한 개발자들이 사용하고 확장할 수 있는 방식입니다.
이들을 적용하는 것으로, 당신은 코드를 더 구조적이며, 깔끔하게 만들 수 있으므로,
더 이상 미로처럼 보이지 않습니다.
각각의 규칙들을 자세히 논의하는 것은 이번 주제에서 벗어난 영역입니다.
이 모든 규칙들은 각각 독립적인 주제로 다룰 만 합니다.
Conclusion - 결론
우리가 몇 개월 혹은 심지어 몇 년동안 쉽게 유지보수할 수 있는 지속가능한 프로그램을 만들기 위해서,
우리는 프로그램의 디자인에 대해서 먼저 생각해야 합니다.
작업을 시작하고, 우리는 디자인 원칙들에 대한 우리의 지식을 적용해야 합니다.
우리는 DRY, YAGNI, KISS 와 같은 평범한 상식을 사용 할 수 있습니다.
하지만, 거대한 프로젝트에서 작업 할 때는,
SOLID 원칙들의 집합에 기초한 더 복잡한 접근법을 사용하는 것이 낫습니다.
words to remember
crucial : 중대한, 결정적인, 어려운
sufficient : 충분한, 할 만큼의 능력이 있는, 할 능력이 있는, 충분
manipulate : 조종하다, 교묘히 다루다, 잘 처리하다
process : 처리하다, 가공하다, 방법
adhere : 준수하다, 들러붙다, 집착하다
involve : 관련시키다, 감다, 포함하다, 말아넣다
significance : 중요성, 의미, 중요, 의미있음
unanimous : 만장일치로, 합의의, 만장일치의, 전원 일치의
segregation : 분리
sustainable : 지속 가능한 ==> sustain : 지속시키다, 버티다, 훌륭히 해내다
As per : ~에 따라
revise : 개정하다, 교정하다, 정정하다,
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Docker' 카테고리의 다른 글
Synchronous, asynchronous, parallel - 동기, 비동기, 병렬 (0) | 2024.07.12 |
---|---|
Coupling and Cohesion - 연결성과 응집도 (0) | 2024.07.11 |
YAML - YAML 문법과 사용법 (0) | 2024.07.09 |
Interfaces - 인터페이스 (0) | 2024.07.03 |
What is object oriented programming - 객체지향 프로그래밍은 무엇인가 (0) | 2024.06.28 |