프로그래밍 언어 이해하기3

타키탸키·2020년 12월 29일
0

컴퓨터 개론

목록 보기
4/9
post-thumbnail

프로그래밍 언어를 이해하는 마지막 시간. 이번 시간에는 프로그래밍 언어를 제대로 사용할 수 있는 방법들에 대해 알아보고자 합니다.

📝 좋은 코드 작성하기

앞서 여러 프로그래밍 언어의 분류를 통해 원하는 프로그래밍 언어를 찾으셨길 바랍니다. 사용할 프로그래밍 언어를 선택했다면 이제 남은 것은 코딩입니다! 코딩을 작성하는 방법은 다양합니다. 하지만 개발자들은 좋은 코드를 작성하기 위해 노력을 많이 기울이는데요. 그 이유를 알아볼까요?

영어 문장을 적을 때, 복잡한 문법이 많다고 해서 좋은 문장이라고 하지 않는 것처럼 코드 또한 복잡성에 퀄리티를 두지는 않습니다. 우리는 잘 동작하는 프로그램을 만드는 것이 아니라 코드의 퀄리티가 좋은 프로그램을 만들고자 노력해야 합니다.

내공이 있는 프로그래머의 경우, 코드를 몇 줄만 읽어보고도 이것이 좋은 코드인지 나쁜 코드인지 구분이 가능하다고 합니다. 프로그래밍 분야는 다른 곳에 비해 학벌, 스펙, 나이가 중요하지 않습니다. 코드만 보더라도 그 사람의 실력을 알 수 있기 때문입니다. 그렇다면 좋은 코드를 구분하는 기준은 무엇이 있을까요?

언어는 소통을 위해 사용합니다. 프로그래밍 언어도 마찬가지입니다. 에러가 없는 코드라는 건 컴퓨터가 이해할 수 있는 언어를 잘 활용했다는 것입니다. 프로그램 개발을 위해 협업을 할 때, 다른 개발자와 원할한 소통을 하는 것은 매우 중요합니다. 사람이 읽기 쉬운 코드는 가독성이 좋은 코드라고 할 수 있습니다.

1. Commnt 활용하기 🍀

가독성이 높은 코드를 작성하기 위해 Comment를 잘 활용하는 것이 중요한데요. 상황에 맞는 적절한 Comment를 잘 파악해야 합니다. 너무 적거나 많은 정보를 제공하면 오히려 독이 되기 때문이죠. 다른 사람의 모범 코드를 참고하다보면 효과적으로 Comment를 작성하는 방법을 체득할 수 있습니다.

2. 이름 잘 짓기 🍀

개발자들이 우스개소리로 자주 하는 말 중에 이름을 잘 짓는 것이 업무에 있어 가장 중요하다는 것입니다. 이는 아주 틀린 말은 아닙니다. 코딩을 하다보면 변수와 함수에 이름을 지을 일이 많은데요. Comment와 마찬가지로 정보 제공에 있어 적절한 길이를 고려해 봐야 합니다.

너무 막연하게 Score와 같은 짧은 단어로 정의하는 것도 적절치 않지만 반대로 너무 구체적으로 the_most_longest_name_in_the_world와 같이 적을 필요도 없는 것이죠. 따라서, 전체적인 코드의 흐름 안에서 충분히 구체적이고 간결한 이름이 가장 적당합니다.

3. 스타일 가이드 참고하기 🍀

영작을 할 때, 스타일 가이드를 참고해 본 경험이 있나요? 스타일 가이드에는 좋은 문장을 사용할 수 있는 방법들이 나열되어 있습니다. 코딩도 마찬가지죠.

변수명을 지을 때, 사람마다 다양한 방법을 사용하여 띄어쓰기를 합니다. math score를 한 번 볼까요? math_score(snake 표기법) / MathScore(pascal 표기법) / mathScore(camel 표기법)과 같이 다양한 표기법으로 띄어쓰기를 할 수 있습니다. 이러한 표기법이 스타일 가이드에 잘 나타나 있습니다.

프로그래밍 언어마다 스타일 가이드를 두고 있는데요. 구글에서 프로그래밍 언어 이름과 style guide를 함께 입력하면 그 예시들을 찾을 수 있으니 한 번 확인해 보시길 바랍니다.

📝 구조화된 코드

인스타그램과 카카오톡 같은 프로그램은 매우 복잡해서 그 코드도 매우 깁니다. 만약 이 길고 복잡한 코드가 한 번에 나열되어 있다면 개발자의 입장에서 원하는 부분을 잘 찾아 관리하는 것이 쉬울까요? 당연히 어렵습니다.

따라서, 이러한 복잡한 코드에는 구조화가 필요합니다. 이러한 구조화를 파일 분리라고 하는데요. 파일 분리는 관련된 코드를 필요한 만큼 한 곳에 모아두는 것을 말합니다. 파일 분리가 잘 되어 있으면 하나의 오류를 수정하기 위해 여러 파일을 뒤져볼 필요가 없습니다. 기능에 따라 파일이 분리되어 있기 때문이죠. 객체 지향 프로그래밍은 이러한 구조화의 한 예라고 볼 수 있겠네요.

개발을 할 때 겪는 공통적인 문제가 있습니다. 예를 들어, 내가 만든 함수를 동료 개발자가 잘못된 방향으로 사용하는 일이 있습니다. 이러한 문제는 비단 한 사람의 개발자만 겪는 문제가 아닙니다. 이미 다른 개발자들도 한 번쯤 겪는 문제라는 거죠. 이처럼 개발자들이 공통적으로 겪는 문제들을 정리하고 그 해결 방법이 제시된 자료를 Design Pattern이라고 합니다. 다시 말해, 프로그래밍에서 고질적으로 발생하는 문제들을 해결하기 위한 테크닉이라고 정의할 수 있습니다.

  • Design Patterns - Elements of Reusable Object-Oriented Software

이 책은 Design Pattern을 잘 정리해 놓았습니다. 필요에 따라 발생하는 문제들을 해결하는데 도움이 될 수 있으니 참고해보세요.

누구나 좋은 프로그램을 쉽고 편하게 만들고 싶은 마음은 다 같기 때문에 어떤 문제를 겪을 때는 누군가 해결책을 만들어뒀을 수도 있다는 가능성을 항상 열어 두어야 합니다.

📝 라이브러리

잘 구조화된 코드를 작성하다보면 다른 프로그램에서 동일한 코드가 작성되는 경우가 발생합니다. 이는 꽤 자주 일어나는 일인데요. 만약 필요한 코드가 있으면 다른 사람이 개발한 코드를 그대로 붙여와도 되는 경우가 있습니다. 이처럼 자주 쓰일 법한 코드를 모아둔 곳을 라이브러리라고 합니다.

라이브러리는 프로그래밍의 성장에 크게 기여했습니다. 기존의 코드를 가져다 쓸 수 있게 되면서 개발 속도가 크게 늘었고 라이브러리를 사용할 줄 알면 프로그래밍을 거의 모르는 사람도 개발을 할 수 있게 되었습니다.

데이터 사이언스는 이러한 라이브러리를 가장 활발히 활용하고 있는 분야 중 하나인데요. 그 예를 한 번 살펴볼까요?

import pandas as pd
import seaborn as sns

df = pd.read_csv("data/movie_genres.csv")
sns.clustermap(df.corr())

이 코드에서 pandas와 seaborn이 라이브러리의 이름인데요. 첫번째 함수를 통해 pandas에서 movie_genres라는 데이터를 읽어옵니다. 두번째 줄에서는 불러온 함수에 대한 상관관계를 그래프로 나타내줍니다. 이처럼 라이브러리를 활용하면 코드를 복잡하게 짜지 않아도 그 기능을 쉽게 사용할 수 있어 비전문가의 데이터 사이언스 유입이 크게 늘었습니다.

라이브러리는 언어를 선택하는 기준이 되기도 하는데요. 라이브러리는 여러 프로그래밍 언어 중 하나로 작성되어 있습니다. 즉, 언어마다 자신에게 맞는 라이브러리가 있다는 것이죠. 앞서 살펴본 pandas와 seaborn은 Python에서만 활용 가능한 라이브러리입니다. 만약 원하는 라이브러리가 Python에는 있고 Java에는 없다면 Python을 사용해야겠죠? 직접 그 코드를 작성하려면 매우 어려울 테니까요.

📝 프레임워크

프레임워크는 적은 양의 코드로 프로그램을 만들 수 있다는 점에서 라이브러리와 유사한 기능입니다. 이러한 점에서 두 개념을 자주 혼동하긴 하지만 사실은 그 차이가 큽니다.

프레임워크는 한 마디로 뼈대라 할 수 있습니다. 하나의 뼈대가 주어지고 코드를 작성할 곳이 빈 공간으로 남아있습니다. 정해진 빈 곳에 코드를 작성하면 프로그램 하나가 완성됩니다. 영어 공부를 할 때 사용하는 템플릿과 유사한 개념이라 볼 수 있겠네요.

어떤 경우에 프레임워크를 활용하면 좋을까요? 프레임워크는 큰 틀이 정해져 있고 세부 내용만 바뀌는 프로그램에 아주 좋습니다. 쇼핑몰의 경우를 생각해 볼까요? 쇼핑몰은 옷, 식품, 전자제품 등 판매하는 물건들이 다 다르지만 그 구조는 매우 유사합니다. 쇼핑몰을 위한 프레임워크는 쇼핑몰 운영에 필수적인 기능들이 모두 담겨있습니다. 따라서, 몇 가지 명령어만으로 쇼핑몰 웹페이지가 완성되는 것이죠.

프레임워크의 또 다른 장점은 내가 미처 생각하지 못한 기능들이 이미 구현되어 있다는 점입니다. 해킹에 대한 보안 기능이나 비밀번호 암호화 기능 같이 어려운 부분들을 프레임워크가 알아서 제시해 주는 것이죠. 나머지는 원하는 구성에 맞게 조금씩 고치기만 하면 되는 것입니다.

프레임워크의 단점은 이미 정해진 틀을 바꿀 때 생깁니다. 프레임워크의 구조가 매우 복잡하기 때문에 웬만한 실력자가 아니면 바꾸기가 어렵습니다. 심지어 바꾸는 것보다 새로 만드는 것이 나을 정도라고 하네요. 😂😂😂

📝 라이브러리 vs 프레임워크

앞서 라이브러리와 프레임워크의 특징 때문에 두 개념을 자주 혼동할 수 있다고 했습니다. 두 개념의 차이를 명확히 알아봅시다.

라이브러리개인 카페와 같습니다. 카페를 처음 운영하는 사장님은 음료를 제작하는 레시피에 대해 아는 것이 많지 않습니다. 그런데 동네에서 유명한 카페에서 기존의 레시피에 따라 자동으로 음료를 만드는 기계를 제공해주었습니다. 이제 사장님은 버튼을 누르기만 하면 원하는 음료를 만들 수 있게 되었습니다. 이처럼 라이브러리는 이미 누가 만들어 둔 도구를 가져와서 사용하는 것입니다.

프레임워크프렌차이즈 카페와 같습니다. 프렌차이즈는 본사에서 정해진 레시피와 기계를 제공합니다. 내부 디자인, 메뉴 이름, 메뉴판, 재료 등 세부 사항에 대해서도 신경 쓸 필요가 없습니다. 본사의 방침대로만 하면 되니까요. 생각도 못한 법적 조치도 본사의 규정만 따르면 해결할 수 있습니다. 사장님은 그저 어떤 알바를 쓸 지, 언제 오픈하고 닫을 지 정도만 고민하면 됩니다. 이처럼 프레임워크는 최소한의 노력으로 프로그램이 완성 가능하도록 뼈대를 제공합니다.

📝 타인의 코드에서 배우기

프로그래머에게 있어 가장 좋은 스승은 잘 짜여진 좋은 코드입니다. 앞서 모범 코드를 참고하는 것이 초보 개발자에게 많은 도움이 된다고 했었는데요. 훌륭한 코드를 두고 어떤 구조로 이루어져 있는지, 어떤 스타일 가이드가 적용되어 있는지, 변수명과 코멘트는 어떤 식으로 작성했는지, 어떤 라이브러리나 프레임워크를 사용하고 있는지를 살펴보면 됩니다. 좋은 코드를 꾸준히 관찰하고 분석하며 눈에 익혀야 내것이 되고 실력을 늘릴 수 있습니다.

그렇다면 좋은 코드를 찾을 수 있는 곳은 어디에 있을까요?

1. 라이브러리 🐾

프로그래밍은 공유의 문화를 가지고 있습니다. 여러 프로그래머가 제공한 라이브러리의 내부를 잘 살펴보면 좋은 코드들이 많이 숨어있습니다.

여러 사람이 공유해서 사용하는만큼 그 퀄리티가 매우 좋아야하기 때문에 라이브러리는 훌륭한 사람이 신경써서 만든 것이 대부분입니다.

라이브러리의 내부 코드를 보며 앞서 말한 변수명과 코멘트, 구조와 스타일 가이드 등을 파악하면 됩니다.

라이브러리의 공식 홈페이지에는 라이브러리 사용법과 예시가 잘 나타나 있으니 한 번 확인해보는 것도 좋겠네요.

Pandas 라이브러리: [https://pandas.pydata.org/docs/user_guide/10min.html]

2. 개발 문서 🐾

프로그래밍에는 사용법을 알려주는 공식 설명 문서들이 있습니다. 라이브러리와 프레임워크, 언어에도 말이죠.

공식 문서에서는 좋은 예시들을 많이 제공하고 있습니다. 가장 엄선된 정석 코드만이 예시에 들어갈 수 있죠. 개발 문서를 자주 읽다보면 사람들이 어떤 방식으로 코드를 작성하는 지 배울 수 있습니다.

3. 커뮤니티 🐾

프로그래밍 세계는 활발한 커뮤니티 문화가 조성되어 있습니다. 개발을 하던 중 막히면 구글링을 통해 문제를 해결할 수 있는데요. 아마 stackoverflow라는 사이트를 자주 접하게 될 겁니다. 굳이 질문을 하지 않아도 선배 개발자들이 이미 비슷한 문제를 겪고 논의를 했던 기록들이 많이 올라와있기 때문에 참고가 가능합니다.

블로그를 통해 개발 기록을 남기는 분들도 많으니 참고해 보면 좋겠죠?

구글링을 할 때 Best Practice라는 키워드로 검색을 하면, 가장 좋은 코드의 예시나 그에 대한 논의를 볼 수 있습니다.

* 이 자료는 CODEIT의 컴퓨터 개론 강의를 기초로 작성되었습니다.
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글