본문 바로가기

programming study/Computer Science

[코드잇] 프로그래밍 언어 이해하기 (2)(2021.2.9)

본 내용은 해당 강의 토대로 작성

프로그래밍 언어 Overview

01. 프로그래밍 언어의 스펙트럼

프로그래밍 언어의 분류 기준

  • 객체 지향 프로그래밍
  • Dynamic typing & Static typing
  • 고수준 언어(High-level) & 저수준 언어(Low-level)
    • 고수준 언어: 사람과 가까운 언어 (Python, Ruby)
    • 저수준 언어: 기계와 가까운 언어 (C, Java)
    • 더 저수준인 언어 : 어셈블리어, 머신코드

02. 프로그래밍 언어의 추상화

  • 추상화가 많이 될 수록 고수준 언어
  • 추상화 정도에 따라 문법, 코드를 작성하는 방식, 코드를 바라보는 관점이 달라진다.

03. 저수준 언어와 고수준 언어 비교하기

  • 고수준 언어
    • 프로그래머가 좀 더 필요한 기능과 논리에 집중할 수 있다.
    • 실행 속도가 느리다.
  • 저수준 언어
    • 코드 작성과 관리가 오래 걸린다.
    • 실행 속도가 빠르다.
    • 효율적이다.
    • 한정된 자원 환경에서도 사용할 수 있다.

04. 프로그래밍 언어 총정리

자세한 언어

  • Low-level에 가까운 언어
  • 객체 지향 개념이 적용되지 않는다.
  • 컴퓨터적 구조 고려
  • 임베디드 시스템
  • 속도가 중요한 서비스(ex. 채팅 애플리케이션, 동영상 스트리밍 서비스, 검색 엔진)
  • 장점 : 실행속도, 한정된 자원에서도 효율이 좋음
  • 단점 : 코드 작성이 오래걸리고 유지보수의 어려움

어셈블리 언어, C 언어

체계적인 언어

  • 자세한 언어에서 객체 지향 개념이 적용된 언어
  • 협업과정에서 오류가 적다.
  • 큰 규모의 프로젝트에 적합
  • 장점 : 유지 보수의 편리
  • 단점 : 비교적 어려운 문법, 체계적으로 설계하는데에 시간이 오래걸림

Java, C++

쉬운 언어

  • 객체 지향 개념 적용
  • Dynamic typing
  • 빠르게 개발이 필요한, 변화가 많고 잦은 분야에서 많이 사용
  • 데이터 사이언스 분야
  • 업무 자동화와 같이 개인 규모의 프로젝트
  • 장점 : 진입장벽이 낮음, 코드 가독성이 좋고 작성이 빠름
  • 단점 : 코드 실행 속도 느림, 큰 규모의 프로젝트에서 실수 방지의 어려움, 협업에 부적절

Python, Ruby

0.5 특수 목적 언어

  • 일반적인 용도로 만들어진 프로그래밍 언어(General-purpose programming language)
    • Java, C, C++ …
  • 특별한 목적을 위한 프로그래밍 언어(Domain-specific programming language)
    • R, SQL, HTML, CSS, MATLAB, Csound, Scratch

R

  • 통계 소프트웨어 개발, 데이터 분석 및 시각화
  • 통계나 빅데이터 분석에 필요한 전처리, 분석, 수학적 계산과 그래프 그리기 기능에 특화

SQL

  • 데이터베이스를 관리하기 위한 목적의 프로그래밍 언어
  • 데이터베이스 : 데이터를 모아둔 공간

HTML, CSS

  • HTML : 웹 페이지의 구조레이아웃 담당
  • CSS : 웹 페이지의 시각적인 표현 담당
  • JavaScript를 함께 사용해서, 웹 페이지가 사용자와 상호작용 하도록 할 수 있다.

프로그래밍 언어 제대로 사용하기

01. 읽기 쉬운 코드

  • 컴퓨터가 정확하게 동작하면서 가독성이 좋은 코드를 작성해야 한다.

Comment

  • 코드 상에서 사람에게 전하는 메시지
  • 기능이 어떤 의도인지, 주의할 점 적어두기

이름 잘 짓기

  • 변수, 함수의 이름을 적절하게 지어야 한다.
  • 전체적인 코드의 흐름 안에서 충분히 구체적이고 간결한 이름

02. 스타일 가이드 활용하기

  • 일정한 규칙이 있어야 코드가 보기 좋다.
  • 각 언어 별로 규정한 스타일 가이드가 존재한다.
    • 구글 검색

변수명 짓기

변수 명을 지을 때 여러가지 방법이 있다.

math score

  • snake 표기법 : math_score
  • pascal 표기법 : MathScore
  • carmel 표기법 : mathScore

03. 구조화가 잘 된 코드

구조화

  • 파일 분리: 관련된 코드를 한 곳에 모아두는 것
  • 객체 지향 프로그래밍
  • 디자인 패턴(Design Pattern) : 프로그래밍에서 고질적으로 발생하는 문제들을 해결하기 위한 테크닉

04. 라이브러리

  • 자주 사용되는 코드를 모아 놓은 것
  • 필요한 코드를 찾아 사용할 수 있다.
  • 빠른 프로그래밍을 할 수 있다.
  • 데이터 사이언스에서 많이 사용
  • 언어마다 자신에게 맞는 라이브러리가 있다.
    • 언어 선택의 기준

05. 프레임워크

  • 준비된 뼈대에 코드를 채워넣는 방식
  • 반은 완성된 프로그램
  • 간단하고 빠르게 프로그램을 만들 수 있다.
  • 큰 틀이 정해 있고 세부내용만 바뀌는 프로그램에 사용(ex. 쇼핑몰)
  • 고려하지 못한 부분도 제공한다. (ex. 보안, 암호화)
  • 원하는 서비스에 맞게 수정한다.
  • 프레임워크 틀 자체를 바꾸는 것은 어렵다.

06. 라이브러리 vs. 프레임워크

라이브러리 프레임워크
이미 누가 만든 도구를 가져와 사용 정해진 틀에 맞춰 코드 작성
코드를 가져오는데 비용이 들지 않음 최소한의 노력으로 프로그램 완성

07. 남의 코드에서 배우기

  • 잘 짜여진 코드를 살펴보면서 어떤 식으로 코드를 작성하는 것이 좋은 것인지 알 수 있다.

좋은 코드를 찾을 수 있는 곳

  • 라이브러리 내부의 코드
  • 개발 문서
  • 커뮤니티
    • 구글 Best Practice 검색

느낀점

생각해보니 지금까지 파이썬으로 알고리즘 문제를 풀면서 내 방식대로 너무 지저분하게 작성해왔던 것 같다. 한 번 스타일가이드를 공부해야겠다.