본 내용은 해당 강의 토대로 작성
프로그래밍 언어 살펴보기
01. 프로그래밍 언어란?
- 컴퓨터 : 일을 대신해 주는 기계
- 프로그램 : 컴퓨터가 어떤 일을 해야할지 알려주는 설명서
- 프로그래밍 언어 : 설명서를 쓰기 위해 사용하는 언어
02. 프로그래밍 언어의 발전
- 주판, 파스칼 계산기
- 단순 계산
- 프로그래밍 언어 : 숫자로만 이루어짐
- 현대의 컴퓨터
- 많은 기능
- 프로그래밍 언어 : 문자와 숫자, 수학 기호
프로그래밍 언어를 분류하는 두 가지 기준
01. 프로그래밍 언어 구분하기
- 공통적으로 영어, 숫자, 괄호, 따옴표, 점, 세미콜론으로 이루어져있다.
- 각 언어마다 자료형, 변수, 함수, 파라미터 형식의 차이가 있다.
- 다양한 이유로 많은 언어들이 만들어지게 되었다.
- 용도
- 상황
- 프로젝트
02. 객체 지향 프로그래밍
- 객체 지향: 프로그래밍에대한 여러 접근 방식 중 하나 cf) 절차지향(C, Ftn, Haskell)
- 객체 지향 언어들 : Swift, Java, Kotilin, Ruby, Objective-C, C++, Python, C# 등
03. 객체 지향 프로그래밍 이해하기
Top -down
- 많은 복잡한 기능을 가진 프로그램을 협업하여 만들 때 사용하는 방식
- 전체를 각 부분으로 나누어 각자 완성해 나간다.
- 문제점
- 하나의 데이터가 여러 함수에서 사용된다.
- 어떤 데이터가 사용되는지 쉽게 예측할 수 없다.
- 완성되기 전에 동작이 잘 되는지 확인 불가.
- 하나의 오류가 전체를 망가뜨릴 위험이 있다.
- 하나의 기능을 수정할 시 모든 코드를 점검해야 한다.
객체 지향 프로그래밍(Bottom -up)
- 객체: 함수와 관련있는 변수, 데이터를 하나로 묶은 것
- 프로그램을 객체 단위로 나누어서 작업
- 직관적
- 단독으로 테스트 가능
- 한 객체가 오류가 발생해도 나머지는 동작한다.
객체 지향의 장단점 정리
장점 | 단점 |
---|---|
프로그래밍 용이 | 설계부터 많은 비용 소요 |
가독성 | 규모가 작은 프로젝트에서 비효율 |
유지보수 | 느린 실행속도 |
재사용 가능 | 저장 공간을 많이 차지 |
테스트 가능 |
-
객체 지향 언어를 사용하면 좋은 곳
- 많은 데이터를 다루는 프로그램
-
객체 지향 언어가 적합하지 않은 곳
- 극도로 빠른 실행속도가 필요
- 저장장치가 성능이 제한적인 분야
- 임베디드
딥러닝, Ai를 파이썬에서 만드는 이유는?
- 실제 연산 작업은 C, C++, Java가 수행
- 파이썬은 라이브러리를 통해 그를 정리하고 상호작용하는 역할
04. 변수의 데이터 타입
자료형
- 변수의 데이터 타입 지정
- Java, C
- 복잡, 비효율
- 코드를 정밀하게 작성할 수 있다.
- Python, Ruby는 자료형이 필요없다.
- 간편함, 편리함
- 코드를 정밀하게 만들 수 없어 오류 발생 가능성이 있다.
05. Dynamic typing vs. Static typing
- 프로그래밍 언어 패러다임
Dynamic typing
- 변수의 자료형을 정하지 않는 언어
- 간결, 편리
- 컴퓨터적 구조 생략
- 가독성
- 접근성
- 작은 사이즈의 프로그램을 만들기 적합
- 느린 실행속도
Static typing
- 자료형을 정하는 언어
- 명확, 정교
- 컴퓨터적 구조
- 제약, 규칙이 많다. (사람의 실수를 방지, 체계적인 코드 작성)
- 많은 사람이 협업하는 프로젝트에 사용
- 빠른 실행속도
- 임베디드, 실시간 투자, 인공 지능 분야
장단점 정리
Dynamic typing | Static typing | |
---|---|---|
코딩 속도 | 빠름 | 느림 |
실행 속도 | 느림 | 빠름 |
가독성 | 좋음 | 나쁨 |
난이도 | 쉬움 | 어려움 |
느낀점
왜 JavaScript는 웹에서 사용되고 Java는 문법이 왜 그렇게 복잡한지에 대해 궁금했는데 큰 맥락에서 알수있게 되었다. 내에게 필요한 언어가 무엇이고 왜 배워야하는지 정할 수 있을 것 같다.
'programming study > Computer Science' 카테고리의 다른 글
TDD와 단위테스트 (0) | 2021.07.14 |
---|---|
[코드잇] 기본 자료 구조들 (1) (2021.2.26) (0) | 2021.02.26 |
[코드잇] 소프트웨어 이해하기 (2021.2.10) (0) | 2021.02.10 |
[코드잇] 프로그래머의 세계 이해하기 (2021.2.10) (0) | 2021.02.10 |
[코드잇] 프로그래밍 언어 이해하기 (2)(2021.2.9) (0) | 2021.02.09 |