'컴퓨터개론' 2.프로그래밍 언어 이해하기

인덱스·2023년 1월 6일
0

codeit

목록 보기
2/17

*2021.06.25 00:41 에 작성한 글

컴퓨터개론 두번째 토픽


프로그래밍 언어의 구성요소

  • 영어, 숫자, 괄호, 따옴표, 점, 세미콜론

용도 상황 프로젝트에 따라 쓰이는 프로그래밍 언어 다름

프로그래밍 언어 분류 기준

  • 객체 지향 프로그래밍 언어인가? (객체를 지향하는 언어 vs. 객체를 지향하지 않는 언어)

  • 변수의 데이터 타입을 어떻게 사용하는가? (Dynamic Typing 언어 vs. Static Typing 언어)

객체지향(object-oriented)

장점

  • 유지보수에 용이하다

  • 가독성이 높다

  • 재사용하기 좋다

  • 테스트가 쉽다

단점

  • 설계가 어렵다

  • 작은 규모의 프로그램에서는 객체 지향적으로 작성하는 것이 더 오래 걸릴 수 있다

  • 극도로 빠르거나, 주어진 자원을 극도로 활용해야하는 경우에는 좋지 않다

  • 임베디드와 같은 특정 분야에는 적합하다

객체 지향 언어 Good

  • 많은 데이터를 다루는 프로그램

  • 규모가 큰 프로젝트

객체 지향 언어 Bad

  • 극도로 빠른 실행 속도가 필요한 분야

  • 저장 장치나 성능이 제한적인 기기(스마트 워치, 스마트 TV, 스마트 냉장고)에서 돌아가는 프로그램

대표적인 예

Python, Java

Dynamic typing

Dynamic typing 언어는 간편함과 편리함을 추구하며,

컴퓨터적 구조를 생략하기 때문에 코드의 내용(로직)이 눈에 잘 들어오고 사람이 코드를 이해하기 편해서 학습하기가 쉽습니다.

다만 컴퓨터적 구조를 생략하기 때문에 실행 속도에 민감한 곳이나 성능이 좋지 않은 환경에서는 활약하기 힘듭니다.

Static typing

Static typing 언어는 안정성과 정교함을 추구하며,

컴퓨터적 구조를 코드에 적어주기 때문에 코드의 구조가 눈에 잘 들어오지만 코드가 복잡해져서 배우기 어렵습니다.

다만 코드의 컴퓨터적 구조 덕분에 컴퓨터가 고민을 덜 하게 되고, 실행 속도가 중요한 곳에서 활약할 수 있습니다.

이런 특징을 살려 Static typing 언어는 임베디드, 실시간 투자, 인공 지능 분야에서 활약하고 있습니다.

Dynamic typingStatic typing
코딩 속도가 빠르다.코딩 속도가 느리다.
실행 속도가 느리다.실행 속도가 빠르다.
코드의 내용이 눈에 잘 들어온다.코드의 구조가 눈에 잘 들어온다.
배우기 쉽다.배우기 어렵다.
혼자서 빠르게 하는, 작고 단순한 프로젝트에 적합여러 사람이 협업하는, 크고 복잡한 프로젝트에 적합
파이썬, 루비, 자바스크립트C, C++, 자바

퀴즈

  1. Python은 Dynamic typing 언어입니다.

  2. Dynamic typing 언어는 빠른 속도로 개발하는 데 초점을 두기 때문에, 사람의 실수를 방지하기 위한 제약이 없는 편입니다.

  3. Dynaimic typing 언어는 실행 속도가 크게 민감하지 않은 프로젝트에 많이 사용된다.

  4. 혼자서 빠르게 개발하는, 작고 단순한 프로젝트에 적합한 것은 Dynamic typing 언어 입니다.

  5. Static typing 언어는 보통 Dynamic typing 언어보다 배우기 어렵습니다.

추상화

몰라도 되는 내용은 숨기고 꼭 알아야 할 내용만 드러내는 것

추상화가 얼마나 되었는가?

문법, 코드를 작성하는 방식, 코드를 바라보는 관점이 달라짐

퀴즈

1.컴퓨터는 모든 데이터를 동일한 방식으로 저장하기 때문에, 문자나 숫자 같은 것들을 구분해야 한다.

2.컴퓨터적인 구조가 코드에 잘 드러날수록 추상화가 적게 된다. 예를 들어 Java처럼 자료형을 적어주는 언어는 Python처럼 자료형을 생략하는 언어보다 추상화가 적게된 것이다.

3.어셈블리어나 머신코드는 C언어나 Java보다 컴퓨터가 이해하기 쉬운 프로그래밍 언어들이기 때문에, 컴퓨터에 더 가까운 언어다.

4.언어의 추상화 정도에 따라, 프로그래밍을 할 때 초점을 맞추는 포인트가 달라질 수 있다.

첫번째 '자세한 언어'

  • Low-lever에 가까운 어셈블리 언어, C언어

  • 객체 지향 개념이 적용되지 않고, 코드를 작성할 때 자료형 등의 컴퓨터적 구조를 다 고려해줘야 하는 언어

  • 컴퓨터가 실행하기 good, 프로그램을 빠르고 효율적으로 만드는데 최적화

  • 컴퓨터보다 저장 공간이나 성능 열악

ex) 스마트 워치, TV, 스피커, 전광판, 가전제품 등 컴퓨터가 메인이 아닌 기계

ex) 다량의 메시지 실시간 전송하는 채팅 어플, 동영상 스트리밍 서비스, 검색 엔진, github, 머신 러닝 등

*임베디드 시스템 : 자세한 언어 사용! ex) IoT

  • 단점 : 코드를 작성하거나 고치는 게 힘들고 오래걸린다

  • 장점 : 프로그램을 만들기만 하면 컴퓨터가 실행하는 속도는 매우 빠르다. 성능이 안 좋은 컴퓨터에 적용하기 좋다.

두번째 '체계적인 언어'

  • 자세한 언어와 마찬가지로 static typing 언어 but 객체 지향 개념 적용됨 Java, C++

  • 체계가 잡혀있어서 여러 사람이 함께 작업하기에 가장 적합, 협업과정에서 오류 적어 큰 규모의 프로젝트에 적합

  • 단점 : '자세한 언어'보다는 낫지만, 여전히 문법이 쉽지 않다. 코드를 작성하는 시간보다도 체계적으로 설계하는 데 오래 걸린다.

  • 장점 : 짜임새와 협업이 중요한, 규모가 큰 프로젝트에 적합하다. 객체 지향 개념이 적용되어서, '자세한 언어'보다 유지보수 하기 편하다.

세번째 '쉬운 언어'

  • 객체 지향 개념이 적용된 dynamic typing 언어 Python, Ruby

  • 최대한 간결하고 짧은 코드 추구

  • 문법 간편, 코드 작성 시간 최단

  • 장점 : 진입 장벽이 낮다. 배우기 쉽다. 코드를 읽거나 수정하기가 가장 간편하다. 코드를 빨리 작성할 수 있다.

  • 단점 : 코드 작성 시간은 짧지만, 컴퓨터의 코드 실행 속도가 느리다. 성능 제약이 심한 곳에서 빠른 속도를 내야 하는 경우는 사용할 수 없다. 프로그래밍 코드 문법에 제약이 너무 없어서, 큰 규모의 프로젝트에서 실수를 방지하기 어렵다. 많은 사람들의 협업에는 부적합할 수 있다.

특별한 목적을 위한 프로그래밍 언어(Domain-specific programming language)

R

  • 주로 통계 소프트웨어 개발과 데이터 분석 및 시각화에 사용

  • 통계나 빅데이터 분석에 필요한 데이터 전처리, 분석, 수학적인 계산과 그래프를 그리는 등의 기능에 특화

SQL

  • 데이터베이스를 관리하기 위한 목적

  • 데이터베이스 : 데이터를 모아둔 공간

  • 개발자, 마케터, 데이터 분석가들이 SQL을 사용하여 서비스의 데이터(매출, 고객 정보 등)를 분석

HTML, CSS

  • 웹페이지 만들 때 사용

  • HTML : 웹 페이지의 구조와 레이아웃 담당

  • CSS : 웹 페이지 시각적인 표현 담당

  • HTML-> 구조, CSS->표현, Javascript->동작

좋은 코드란? 읽기 쉬운 코드

  • 코멘트 활용과 이름 잘 짓기

스타일 가이드(convention)

객체 지향 프로그래밍과 Desing Pattern을 잘 활용하면 좋은 코드 구조를 만들 수 있다.


라이브러리

이미 누가 만들어 둔 도구를 가져와서 사용!

코드를 가져오는데 돈이 안듦!

언어를 선택하는 기준이 되기도 함

언어마다 자신에게 맞는 라이브러리가 있다

*데이터 사이언스는 라이브러리의 도움을 확실히 받는 분야

Seaborn 라이브러리 - https://seaborn.pydata.org/tutorial.html

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

프레임워크

최소한의 노력으로 프로그램 완성 가능!

큰 틀이 정해져 있고 세부 내용만 바뀌는 프로그램에 좋음

언어의 공식 사이트 링크

검색할 때 'Best Practice'


Life is short you need python

'컴퓨터개론' 2.프로그래밍 언어 이해하기|작성자 Index

profile
헤맨 만큼 내 땅이 된다

0개의 댓글