주니어 개발자를 위한 몇 가지 코드 리팩터링 팁

소프트웨어 개발자의 첫 번째 경력을 시작할 때 대학이나 대학에서 얻은 지식 외에도 알아야 할 몇 가지 사항이 더 있습니다.

과정이 진행되는 동안 훌륭하고 유지 관리 가능한 코드를 작성해야 한다는 요구 사항은 없었습니다. 우리 모두는 단지 일을 끝내고 과정을 통과하기를 원했습니다. 그러나 경력이 있다는 것은 종종 팀에서 일하게 됨을 의미하며 작업 중인 프로젝트는 종종 프로젝트 유지 관리 가능성을 고려해야 합니다. 그 중 하나는 코드를 리팩토링하는 방법을 아는 것입니다.

여기에서는 Python과 유사한 구문으로 몇 가지 예를 제공하고 자세히 설명합니다. 이것은 읽기 쉽도록 웹 프레임워크를 나타내는 것이 아닙니다.

팁 1: 함수



웹 앱이 있고 사용자가 데이터 테이블을 생성할 수 있는 기능을 작성하기 위해 회사 연례 만찬에 참석하고 동시에 행운의 추첨을 받은 사람의 수를 계산하는 직원이 있다고 가정해 보겠습니다.

이것을 갖는 대신:

def generateTable():
  # Get data from a database named 'staffDB', 
  # and get the records who attended annual dinner
  data = staffDB.totalStaffs.filter(attended_annual_dinner=true)

  # Write a formatted table and dump data in
  table = TableObject(
    header1="Name",
    header2="Got Lucky Draw?"
  )

  table.header1.data = data.name
  table.header2.data = data.lucky_draw

  # Count the total number who got lucky draw
  lucky = data.lucky_draw
  who_got_lucky_draw = 0

  for got_lucky_draw in lucky:
    if got_lucky_draw == "yes":
      who_got_lucky_draw += 1

  # Ultimately, pass every data here to the webpage
  return('annual_dinner.html', 
    data=data, table=table, 
    who_got_lucky_draw=lucky_counts)


세 가지 작업을 수행하는 함수를 볼 수 있습니다.
  • 데이터베이스에서 데이터 가져오기
  • 테이블 생성
  • 럭키드로우를 받은 백작

  • 여기에서는 복잡해 보이지 않지만 실제 프로젝트에서 이런 종류의 작성 스타일은 항상 수백 줄의 코드로 끝납니다.

    훨씬 간단한 형식으로 수행할 수 있습니다.

    def getAttendingStaffs():
      # Get data from a database named 'staffDB', 
      # and get the records who attended annual dinner
      data = staffDB.totalStaffs.filter(attended_annual_dinner=true)
    
      table = generateTable(data.name, data.lucky_draw)
      who_got_lucky_draw = getLuckyCount(data.lucky_draw)
    
      return('annual_dinner.html', 
        data=data, table=table, 
        who_got_lucky_draw=lucky_counts)
    
    def generateTable(name, lucky_draw):
      # Write a formatted table and dump data in
      table = TableObject(
        header1="Name",
        header2="Got Lucky Draw?"
      )
    
      table.header1.data = name
      table.header2.data = lucky_draw
    
      return table
    
    def getLuckyCount(lucky_draw):
      # Count the total number who got lucky draw
      who_got_lucky_draw = 0
    
      for got_lucky_draw in lucky_draw:
        if got_lucky_draw == "yes":
          who_got_lucky_draw += 1
    
      return who_got_lucky_draw
    


    이것은 세 가지 기능으로 나뉘며 각 기능은 단일 작업을 수행합니다. getAttendingStaffs() 함수가 호출될 때만 다른 두 함수도 호출하고 필요한 매개변수를 전달합니다.

    이렇게 하면 전체 코드 행이 더 많아지지만 확실히 코드가 더 간결해지고 함수를 수정해야 할 때 탐색이 더 쉬워집니다.

    실제 프로젝트의 예를 들면 테이블 생성에 버그가 있습니다. 전자의 스타일을 사용하면 모든 것을 함수로 묶는 긴 코드 줄을 검색할 수 있으며 코드가 전체적으로 더 지저분해 보입니다. 나중 스타일에서는 특정 기능에만 집중할 수 있으므로 더 잘 집중할 수 있습니다.

    팁 2: 목적에 따른 소스 파일



    이것의 아이디어는 위의 것과 비슷하지만 파일 수준에서 만듭니다.

    즉, 작업 범위에 따라 소스 파일을 생성합니다. 몇 가지 작업을 수행하는 하나의 소스 파일 대신 작업을 몇 개의 소스 파일로 분리하십시오.

    예를 들어 블로그 웹 사이트가 있고 사용자는 블로그 게시물을 작성할 계정이 있습니다. 이 경우 모든 전역 상수를 저장하고, 사용자 계정 정보를 처리하는 작업을 하고, 게시물을 처리하는 작업을 수행하는 몇 가지 소스 파일을 만들 수 있습니다. 마지막으로 해당 파일을 참조하는 기본 소스 파일(진입점)이 있고 함께 작동합니다.

    이렇게 하면 논리가 단일 파일에서 분리됩니다. 따라서 향후 유지 관리에서 사용자가 이미지를 게시물에 업로드할 수 있는 새로운 기능을 원할 수 있습니다. 해당 소스 파일을 엉망으로 만들면 나머지는 영향을 받지 않습니다.

    팁 3: 부정 IF



    종종 우리는 애플리케이션의 동작 방식을 제어하기 위해 조건문을 작성해야 합니다. 간단한 조건문을 작성하는 경우 부정문을 사용하는 것이 좋습니다.

    글쎄, 이것은 실제로 코드를 훨씬 덜 복잡하게 만드는 것은 아니지만 교과서에서 가르친 것(기존의 if-else 스타일)과는 별도로 코드를 조금 더 멋지게 만들 수 있습니다.

    대신:

    def someFunction():
      if somethingPositive:
        # Do this
        return(someValue)
      else:
        # Do that
        return(otherValue)
    


    다음과 같이 만드십시오.

    def someFunction():
      if somethingNegative:  # Negation IF
        # Do this
        return(someValue)
    
      # Proceed to do desired tasks
    


    아마도 예가 더 이해하기 쉬울 것입니다. status 라는 부울 변수가 있습니다.

    def doActionByStatus():
      if not status:
        # Perform tasks if status is false
        text = "The system is not functioning properly."
        return(text)
    
      # Perform tasks if status is true
      text = "All systems are performing well"
      return(text)
    

    statusfalse이고 내부의 작업이 실행될 때 함수가 진행될 테니 걱정하지 마세요. 함수가 return() 문 내에서 첫 번째if에 도달하면 함수가 종료됩니다. 그렇지 않으면 함수는 if 문 이후에 작업을 수행합니다.

    결론



    좋습니다. 이 기사가 주니어 개발자와 신입생의 경력에 ​​도움이 되기를 바랍니다. 더 나은, 더 깨끗하고 유지 관리 가능한 코드를 작성하는 데 도움이 되는 많은 작성 방법이 있습니다.

    습관처럼 할 수 있다면 다음 후배들이 와서 같이 해주면 고맙겠다.

    좋은 웹페이지 즐겨찾기