간단한 방법으로 관심사를 분리하다

진상을 듣는 것은 매우 어렵다.
너의 2000여 줄 프로그램은 모두 한 파일에 쓰여 있다.

하지만 너는 이미 알고 있거나, 아니면 나는 네가 알고 싶다.
나는 네가 그것을 더욱 치밀하게 하려고 시도했다는 것을 알고 있지만, 일은 무의미하다.
이것이 바로 시간과 공간을 초월하는 원칙이다. 이것은 우리가 생활의 각 방면에 도움을 주고, 이를 관심점 분리나 SoC라고 부른다.
나는 이것이 매우 무섭게 들리는 것을 알지만, 걱정하지 마라. t아저씨가 여기 있다. 나는 가능한 한 간단하게 너를 기쁘게 할 것이다.
그래서 오늘 우리는 다음과 같은 몇 가지를 되돌아볼 것이다.
  • 관심사 분리는 무엇입니까?
  • 내중합과 결합
  • 왜 효과가 있습니까?
  • 예제
  • 결론
  • 그러니 진일보한 토론을 하기 전에 긴장을 풀고 당신이 가장 좋아하는 음료수를 들고 스마트 안경을 끼고 시작합시다.

    관심사 분리란 무엇입니까?


    지금, 매 편의 블로그에 너는 한마디를 더해야 한다. 이것은 내가 표절한 것이다wikipedia

    In computer science, separation of concerns is a design principle for separating a computer program into distinct sections such that each section addresses a separate concern.


    자, 이제 수속이 끝났으니 설명해 드릴게요.
    관심점 분리는 보편적인 원칙이다. 거의 모든 사람들이 이렇게 한다. 나는 소프트웨어 개발에 대해 이야기하고 있을 뿐만 아니라, 많은 다른 분야에도 적용된다.상상해 봅시다. 우리는 T삼촌 진료소라는 병원이 있습니다. 우리 병원에는 간호사, 의사, 의료 보조원, 기술자, 문원, 뷔페 식당 등 다양한 역할의 직원들이 있습니다.
    이 사람들이 어떻게 일을 완성했는지 아는 사람이 있습니까?아니, 감당하기 힘들기 때문이다.그들은 서로 다른 직책을 서로 다른 역할로 나누어야 하는데 이런 역할 간의 접점은 매우 구체적이다.
    너는 코드와 더욱 관련된 예를 듣고 싶을 수도 있으니, 여기에 모두가 참고할 수 있는 예가 하나 있다.
    간단한 웹 페이지의 예:
    <!DOCTYPE html>
    <html>
    <head>
    <style>
    body {background-color: powderblue;}
    h1   {color: blue;}
    p    {color: red;}
    </style>
    </head>
    <body>
    
    <h1>This is a heading</h1>
    <p>This is a paragraph.</p>
    
    </body>
    <script>
    console.log("hello world")
    </script>
    </html>
    
    이것은 완벽한 작업 페이지이지만 문제는 우리가 웹 페이지에 더 많은 내용을 추가하고 싶다면 일이 엉망이 될 것이다. 주로 우리의 구조, 풍격과 논리층이 밀접하게 연결되어 있기 때문이다.더 나은 방법은 다음과 같습니다.
    <!-- index.html -->
    <!DOCTYPE html>
    <html>
    <head>
    <link rel="stylesheet" href="styles.css">
    </head>
    <body>
    
    <h1>This is a heading</h1>
    <p>This is a paragraph.</p>
    
    </body>
    <script src="logic.js"></script>
        </html>
    
    // logic.js
    console.log("hello world")
    
    /* styles.css */
    body {background-color: powderblue;}
    h1   {color: blue;}
    p    {color: red;}
    
    이제 우리의 코드는 더욱 깨끗해졌다. 왜냐하면 우리는 그것들을 세 개의 다른 파일로 나누어 서로 다른 층을 처리하기 때문이다.나는 이것이 매우 간단한 예라는 것을 알고 있지만, 그것은 더욱 큰 범위 내에서 응용할 수 있으며, 이것은 문장 하반부의 예 부분에 나타날 것이다.

    내집과 결합


    우리는 왜 이것에 대해 이야기해야 합니까?
    관심사를 분리하는 것은 두 가지 과정과 관련이 있기 때문에 결합을 줄이고 내집합을 증가시킨다.

    무엇이 응집력입니까?



    응집력은 한 조의 사물 간의 관련 정도를 평가하는 지표이다. 예를 들어 주방에서 칼을 칼걸이 위에 놓고 숟가락과 숟가락, 포크와 포크를 놓는다. 알겠다.컴퓨터 과학에서 하나의 방법과 데이터 간의 관계가 얼마나 긴밀한가.
    예를 들어 다음과 같은 두 가지 기능을 사용할 수 있습니다.
    function drawCirle(){
       // draw a cirlce code
    }
    
    function drawRectangle(){
       // draw a rectangle code
    }
    
    이 두 기능은 본질적으로 매우 밀접하거나 비슷하여 그림을 담당하는 같은 모듈/클래스에 위치할 수 있으며 공평하게 말하면 그것들을 함께 놓으면 매우 자연스럽게 느껴진다.그것은 이렇게 보인다.
    class Draw {
    
       public function drawCircle(){
        // draw a circle
       }
    
       public function drawRectangle(){
        // draw a rectangle
       }
    }
    

    결합이란 무엇입니까?



    결합은 기본적으로 두 개 이상의 클래스, 모듈, 구성 요소 간의 의존적인 도량이다.긴밀한 결합이 좋지 않고 느슨한 결합이 좋다.
    고도의 내중성과 낮은 결합성을 가진 코드를 항상 작성해 보십시오.
    이런 방법에는 많은 장점이 있다.
  • 코드가 더욱 뚜렷하고 모든 것이 질서정연할 때 무슨 일이 일어났는지 이해하기 쉽다.
  • 더 좋은 코드 중용성.코드를 다시 사용할 때, 코드를 유지하는 비용이 더욱 낮고, 오류를 확장하거나 복구하는 것도 더욱 쉽다. 코드는 한 곳에서만 찾을 수 있기 때문이다.
  • 더 좋은 테스트 가능성.모든 것이 가지런히 격리되었을 때, 테스트는 수월해졌다.전체 테스트 환경을 설정할 필요가 없습니다. 가상 데이터로 인접 모듈을 시뮬레이션하기만 하면 됩니다.이 방식을 통해 모듈을 블랙박스로 검증하거나 실행 중인 방법을 검증하여 백박스로 테스트할 수 있습니다.
  • 더 빠른 발전.격리 모듈은 새로운 기능을 만들거나 업데이트하는 데 도움이 된다.
  • 조직 구조.모든 것이 가지런히 분리될 때 엔지니어들은 더 좋은 개발 경험을 가지고 업무 모듈에서 일치할 수 있으며 서로 간섭하지 않을 수 있다.
  • 왜 얘가 이렇게 일을 잘해?


    간단한 대답: 정보가 가지런히 분리될 때 우리의 뇌는 정보를 처리하기 쉽다.
    상세 답변: 코드를 쉽게 읽고 유지 관리하고 확장할 수 있도록 구성하는 방법은 다음과 같습니다. 그러나 이는 고객뿐만 아니라 동료에게도 유용합니다.
  • 먼저, 이러한 요소는 일반적으로 독립적으로 변경됩니다. 위의 예에서 구조를 변경하지 않고 스타일을 변경할 수 있습니다.혹은 논리를 유지하고 싶지만 구조를 바꾸고 싶을 수도 있다.그것들을 분리하면 다른 것에 영향을 주지 않고 쉽게 교환할 수 있다.
  • 또 다른 이유는 종종 서로 다른 사람이 서로 다른 역할을 맡기 때문이다.예를 들어 만약에 당신이 웹 사이트를 만들고 있다면, 당신은 내용에 대해 책임을 져야 하고, 다른 사람은 스타일에 대해 책임을 져야 할 수도 있다.관심사를 분리하여 쌍방이 더욱 자유롭게 일할 수 있도록 하다.
  • 세 번째 이유는 물건을 찾기 쉽기 때문이다.만약 페이지의 스타일을 바꾸고 싶다면, CSS 파일로 가서 HTML 파일의 내용을 바꾸고 싶다.

    예.


    만약 내가 이 원칙을 사용하는 모든 다른 유형의 영역을 열거해야 한다면, 이것은 가장 흔히 볼 수 있는 영역이며, 나는 이 글을 영원히 완성하지 못할 것이다.

    인터넷 프로토콜 스택



    인터넷을 디자인할 때 관심사 분리를 사용했다.internet protocol suite에서 관심사를 여러 차원으로 나누는 데 큰 노력을 기울였다.이로써 프로토콜 디자이너들은 단일 층의 관심사에 집중할 수 있다.예를 들어 응용층 프로토콜SMTP은 전송 서비스(일반적으로 TCP)를 통해 전자 우편 세션을 진행하는 것을 포함한다.그러나 SMTP를 사용할 때 TCP가 어떻게 작동하는지에는 관심이 없습니다.이와 유사하게 TCP는 데이터 패키지의 루트가 어떻게 발생하는지에 관심이 없고 이러한 루트는 인터넷 층에서 처리된다.

    모형, 뷰, 컨트롤러(MVC)



    MVC는 응용 프로그램을 세 가지 구성 요소로 나누는 아키텍처 모델입니다.
  • 모델 - 업무층
  • 뷰 - 레이어 표시
  • 컨트롤러 - 레이어 표시
  • 모든 것은 응용 프로그램의 특정한 문제를 처리하기 위해 구축된 것이다.
    MVC는 라벨, 스프링 등 웹 개발 프레임워크에서 가장 유행하는 아키텍처다.

    마이크로 서비스



    모든 사람과 그들의 어머니는 마이크로 서비스에 대해 이야기하고 있다.기본적으로 그것은 다른 소형 독립 프로젝트로 구성된 프로젝트이다.본질적으로 이것은 관심점 분리의 형식이다.

    결론


    나는 이 문장이 끝날 때, 네가 관심사를 분리하는 의미를 더욱 잘 이해할 수 있기를 바란다.이 원칙은 코드뿐만 아니라 현실 생활, 예를 들어 목표 설정 등에도 적용된다는 것을 잊지 마라.이러한 지식을 습득하면, 당신은 마침내 당신의 베테랑 동료들이 자랑스러워할 코드를 작성할 수 있습니다.
    T 아저씨, 나가세요.
    겸사겸사 한마디 하자면, 나는 블로그를 쓰는 데 아직 풋내기라는 비판에 정말 감사한다.

    도구책

  • https://nalexn.github.io/separation-of-concerns/
  • https://www.sumologic.com/blog/5-patterns-better-microservices-architecture/
  • https://www.oreilly.com/library/view/programming-javascript-applications/9781491950289/ch05.html
  • https://en.wikipedia.org/wiki/Separation_of_concerns
  • https://en.wikipedia.org/wiki/Coupling_(computer_programming)
  • https://en.wikipedia.org/wiki/Cohesion_(computer_science)
  • https://softwareengineering.stackexchange.com/questions/32581/how-do-you-explain-separation-of-concerns-to-others
  • 좋은 웹페이지 즐겨찾기