본문 바로가기
Backend

[python] 파이썬 클린코드 (1)

by 구라미 2021. 5. 7.

 

 

 

 

저의 회사의 백엔드 기술스택은 파이썬을 기반으로 이루어져있는데요. 그렇기 때문에 요즘 조금씩 찾아보면서 파이썬에 대해 배워가고 있습니다. 프로그래밍 언어 학습이라는 것이  원래 첫 언어, 처음만 버겁고 하나를 어느정도 익히고 나면 다른 언어들도 그 전보다는 수월하게 익힐 수가 있는데요. 그래서 오늘은 학습의 일환으로 파이썬 클린코드에 대해 정리해보려고 합니다. 

 

1. 변수 선언시 의미있는 변수를 사용하고 타입 지정하기

import datetime

# 나쁜 예
ymdstr = datetime.date.today().strftime("%y-%m-%d")

# 좋은 예
current_date: str = datetime.date.today().strftime("%y-%m-%d")

의미있는 변수, 함수명 사용은 어떤 언어나 공통으로 지켜야할 사항입니다. 저는 프론트엔드 개발자이기 때문에 주로 자바스크립트를 주언어로 많이 사용하는데요. 자바스크립트에는 타입지정이 미흡해서 간과하기 쉬운데, 타입 지정은 매우 중요합니다. 그래야 데이터 타입 불일치로 인한 오류를 줄일 수가 있거든요. 자바스크립트도 이러한 문제 때문에 타입스크립트라는 것이 출현하여 요즘 많이 사용되고 있습니다.

 

2. 같은 타입의 변수,함수명은 일관성 있는 이름으로 사용한다.

# 나쁜 예
def get_member(): pass
def get_student_data(): pass
def get_person_list(): pass

# 좋은 예
def get_member(): pass
def get_member_data(): pass
def get_member_list(): pass

같은 타입, 같은 모델 등 뭔가 공통점이 많은 변수, 함수명은 하나의 규칙을 정해두고 일관적으로 사용하면 개발할 때 혼동하지 않겠죠?
이런 식으로 이름을 일관적으로 사용하는 것도 좋은 방법이지만, 파이썬도 OOP하기 좋은 언어이기 때문에 클래스를 만들어서 그안의 멤버변수, 메소드로 사용하면 더욱 훌륭합니다.

from typing import Union, Dict, Text

class Record:
	pass
    
class User:
	info: str
    
    @property
    def data(self) -> Dict[Text, text]:
    	return {}
    def get_data(self) -> Union[Record, None]:
    	return Record{}

 

3. 너만 아는 관념적인 변수명을 쓰지 말아라

# 나쁜 예
list = ("lion", "monkey", "giraffe", "cat")

for i in list:
	print(i)
    
# 좋은 예
animals = ("lion", "monkey", "giraffe", "cat")

for animal in animals:
	print(animal)
    

코딩할 때 나만 아는 추상적인 네이밍을 하면 함께 협업하거나 추후에 내 코드를 유지보수하는 사람들이 정말 난감해지겠죠? 
해당 변수, 함수에 맞는 적절한 네이밍을 하도록 합니다.

 

4. 조건문을 사용하는 대신 기본 인자값을 설정해라

import hashlib

# 나쁜 예
def create_building(name):
	name = "sample" if name is None else name
	# something to do....

# 좋은 예
def create_building(name: Text = "sample"):
	# something to do....

조건문을 여러개 덕지덕지 사용하는 것보다 인자의 기본 타입과 값을 지정해두면 훨씬 깔끔하고 간결한 코드가 됩니다.

 

5. 함수의 인자 (두개 또는 그거 보다 적은게 이상적)

함수의 파라미터 수를 제한 하는 것은 함수를 테스트할 때 정말 중요합니다. 2개까지는 괜찮지만 그 이상이 넘어가면 권장하지 않는데요. 근데 만일 그 이상의 파라미터를 받아야하는 함수를 만든다면 어떻게 코드를 짜는게 좋을까요?

# 나쁜 예
def create_post(title, body, is_show, link):
	pass

# 자바스타일로 개선
class Post:
	def __init__(self, config: dict):
    	self.title = config["title"]
    	self.body = config["body"]
        #...

post = Post(
	{
    	"title": "my journal",
        "body" : "today is my birthday",
        "is_show": true,
        "link" : "https://seaweedisland.tistory.com/"
	}
)

# 또다른 좋은 방법
from typing import Text

class PostConfig:
	title: Text,
    body: Text, 
    is_show: bool = False,
    link: Text,

def create_post(config: PostConfig) -> None:
	title = config.title
    body = config.body
    #...

# 인자로 넣어줄 PostConig 생성 
config = PostConfig()
config.title = "오늘의 일기"
config.body = "오늘은 날씨가 너무 흐리네요"
config.is_show = True
config.link = "https://seaweedisland.tistory.com/"

create_post(config)

 

이 이외에도 파이썬스럽게 클린코드 짜는 방법이 여러가지 있는데요 나머지는 다음번에 알아보도록 하겠씁니다!

 

 

 

댓글