마법처럼 클래스 이름 지정: 개더링 카드

 

알렉스블로그2
저는 매직: 더 개더링(Magic: the Gathering)을 하면서 자랐습니다. 어렸을 때 나는 카드 이름에 대해 흥미로운 점을 발견했습니다. 일반적인 이름이 없었습니다. "좀비", "엘프", "마법사"라는 이름의 카드는 없었습니다. "Fugitive Wizard", "Llanowar Elves", "Gravebane Zombie", 심지어 "Storm Crow"라는 이름의 카드가 있었지만 "Crow"는 없었습니다. 현대 카드 이름은 훨씬 더 구체적이고 연상적입니다. "어두운 소식의 까마귀"와 "화염심장 늑대인간"을 목격하세요. 왜? 왜냐하면 디자이너는 새 카드를 위한 공간을 열어두어야 하기 때문입니다. "좀비"라는 카드가 있다면 그게 전부입니다. 그 카드는 좀비가 무엇인지를 보여줍니다. 또 다른 좀비 카드를 만들고 싶다면 원래의 “좀비”의 그림자 속에 살게 될 것입니다.
이것은 소프트웨어 엔지니어링에 적용됩니다. 우리가 수업에 대해 선택하는 이름은 우리가 수업에 대해 어떻게 생각하는지, 그리고 수업에 할당할 책임의 종류를 결정합니다. User라는 클래스가 있다면 해당 클래스에 "사용자"라는 개념과 관련된 항목을 넣는 것이 합리적입니다. 그래도 문제입니다. 두는 것이 합리적입니다. 아무것도 User 클래스의 해당 개념과 관련이 있습니다. 로그인 정보, 청구 기본 설정, 이메일 설정 및 권한이 표시됩니다. 대규모 수업이 문제라는 것은 오랫동안 알려져 왔습니다. 같은 곳에 더 많은 논리가 있기 때문에 읽기가 더 어렵고, 논리가 얽힐 가능성이 높기 때문에 변경하기가 더 어렵고, 이로 인해 버그가 발생할 가능성이 더 커집니다.
클래스 이름은 시간이 지남에 따라 클래스가 개발하는 논리의 단계를 설정합니다. 우리는 코드를 한 번만 작성하고 나면 완료되는 것이 아니라는 점을 기억해야 합니다. 코드는 지속적으로 발전하고 있으며 새로운 요구 사항을 충족하기 위해 지속적으로 변경되고 있습니다. 각 단계에서 개발자는 "이 논리가 어디에 적합한가?"라고 자문하게 됩니다. 스티븐 울프램(Stephen Wolfram)이 지적했듯이, “함수 이름은… 사람들이 함수에 대해 어떻게 생각하는지 직접적으로 결정합니다. ”개발자들은 클래스 이름을 로직이 속한 위치에 대한 하나의 기호로 간주합니다. 그들은 클래스에 의해 구현된 개념을 다른 것으로 간주할 것입니다. 이름과 개념이 광범위하다면 개발자는 클래스에 많은 로직을 넣을 것입니다.
일반 클래스 이름에 대해 고려해야 할 또 다른 점은 설명적이지 않다는 것입니다. User라는 클래스를 열면 여기에 포함된 데이터가 무엇인지 즉시 알 수 없습니다. 그 안에는 많은 내용이 포함될 수 있습니다. 알아보려면 그것을 읽어보고 다음 번을 위해 기억해야 합니다. 이는 현직 개발자에게 인지적 부담을 많이 줍니다. 그들은 대규모 수업의 세부 사항을 염두에 두거나 확실하게 하기 위해 그 내용을 읽어야 합니다. 이름이 LoginCredentials와 같은 것이라면 그 이름에 무엇이 포함될 것인지는 매우 분명합니다. 이름은 클래스의 역할을 제한하여 독자를 안내합니다.
우리는 코드를 이해하기 위한 풍부한 단서를 제공하는 코드를 찾아야 합니다. 이름은 퍼즐의 중요한 부분입니다. 매직: 더 개더링(Magic: the Gathering)에서 힌트를 얻어 User의 이름을 좀 더 기억에 남는 이름으로 바꾸려고 하면 이 이름을 분리해야 한다는 것을 빨리 깨닫게 될 것입니다. 우리는 아마도 더 작고 더 집중적인 수업을 하게 될 것입니다. 이는 또한 유익합니다.

저자

  • 애덤 매켄지

    CTO로서 Adam은 HPC 및 고객 성공 팀을 관리하는 책임을 맡고 있습니다. Adam은 Boeing에서 경력을 시작하여 787년 동안 XNUMX을 작업하면서 구조 및 소프트웨어 엔지니어링 프로젝트를 관리하고 날개를 설계, 분석 및 최적화했습니다. Adam은 오레곤 주립대학교에서 우등으로 기계공학 학사학위를 취득했습니다.

비슷한 게시물