프로그래밍 언어 살펴보기
: 프로그래밍 언어의 공통적인 원리
01. 프로그래밍을 배우기 힘든 이유
- 제대로 공부하기 쉽지 않은 프로그래밍
언어가 다양하여 방향성을 정하지 못하고 비전공자가 판단하기 매우 어려움.
어떤 분야에 관심이 있는지, 성향은 어떤지에 따라 언어를 다르게 선택하게 됨.
03. 프로그래밍 언어란?
(+ 컴퓨터, 프로그램, 프로그래밍 언어에 대한 이해 필요)
- 컴퓨터 : 일을 대신 해주는 기계
- 프로그램 : 컴퓨터가 어떤 일을 해야 할 지 알려주는 설명서
-> 컴퓨터가 할 일이 프로그래밍 언어로 적혀 있는 것
- 프로그래밍 언어 : 설명서를 쓰기 위해 사용하는 언어
05. 프로그래밍 언어의 발전
컴퓨터가 발전하면서 프로그래밍 언어도 함께 발전하였음.
예 )
컴퓨터 -> 파스칼 계산기, 프로그램 -> 123+456 = 579, 프로그래밍 언어-> 계산을 위해 계산기의 톱니바퀴 돌리기(프로그래머가 직접)
쉬운 일부터 대신 하도록 하였고 점차 어려운 일을 맡기기 시작하였음.
-> 다양한 컴퓨터와 프로그래밍 언어의 등장
프로그래밍을 할 수 있는 컴퓨터도 어느 정도 보급되어 있고, 프로그래밍 언어도 어느 정도 사람이 이해할 수 있는 수준이 되었음
-> 누구나 나만의 프로그램을 만들 수 있는 환경을 갖추었음 !
프로그래밍 언어를 분류하는 두 가지 기준
1. 객체 지향 지원 여부
2. 변수의 자료형 지정 여부
01. 프로그래밍 언어가 너무 많아요 !
- 프로그래밍 언어의 종류가 왜 많아졌는가
프로그래밍 언어의 구성 요소 : 영어, 숫자, 기호(괄호, 따옴표, 점, 세미콜론) 등
프로그래밍의 기본 요소인 자료형, 변수, 함수, 파라미터 를 통해 각 언어가 어떻게 다른지를 알 수 있음.
같은 기능을 만드는데 왜 여러가지 언어가 존재하는가?
-> 사회의 상황이나 개발자의 필요 등 다양한 이유로 불편함을 느끼게 되고 이러한 언어의 단점을 보완한 새 언어를 만들게 되었다.
- 최근 프로그래밍 언어들은 어떻게 바뀌고 있는가
결론적으로 용도, 상황, 프로젝트에 따라 다른 언어를 사용하게 되었다.
* Tip : TIOBE에서 프로그래밍 언어 인기 순위를 확인할 수 있다 ! (1. 자바, 2. C언어, 3. 파이썬)
03. 첫 번째 패러다임: 객체 지향 프로그래밍
- 여러 프로그래밍 언어들 사이에는 어떤 차이가 있는가
보통의 분류 기준 : 큰 사건 / 중요한 개념 ( 예: 산업혁명 )
프로그래밍 세계의 산업 혁명 = 객체지향
객체 지향 (Object Oriented) : 프로그래밍에 대한 접근 방식 중 하나로, 지배적으로 많이 쓰이는 것임.
많은 언어들이 객체 지향 언어로 등장하였음 (예: Swift, C3, Java, Python, Kotlin, C++, Objective-C)
-> 객체지향으로 프로그래밍을 할 것이라는 전제하에 모든 문법과 도구를 만들어 둔 언어들
* Tip : 객체 지향이 무조건 정답은 아니다 ! 절차 지향이 속도가 더 빠른 경우가 있어 어떤 게 좋은지는 그때그때 다르다.
절차 지향 언어 : C언어, Ftn(Fortran 포트란), assembly 언어(어셈블리), haskell (하스켈) 등
04. 객체 지향 프로그래밍 이해하기
- 객체 지향 프로그래밍 등장 배경
과거
탑다운 방식 = 협업을 위해 전체 윤곽을 완성한 뒤, 그 안에 어떤 함수가 필요한지 분석하고 나누어 기능을 완성하여 합쳐 프로그램 완성
-> 단점 : 1. 코드 전체를 완성하지 않으면 동작을 제대로 확인해볼 수 없다. 2. 하나의 기능을 수정할 때 모든 코드를 점검해 봐야 한다.
-> 하나의 데이터가 여러 함수에서 사용될 수 있음. 실수 하나로 전체의 프로그램에 영향을 주고 수정하기 어려움.
현재 (위의 탑다운 방식의 단점 보완)
객체 지향 (Bottom up) = 협업을 위해 기능과 관련있는 단위의 변수(데이터)로 묶은 것을 객체로 분류하고 이를 통해 기능을 분배
예 ) 사용자 객체, 게시글 객체
- 객체 지향 프로그래밍의 장단점 정리
장점
데이터나 기능에 변화가 생기더라도 관련 객체만 신경쓰면 되기 때문에 프로그래밍하기 훨씬 수월하다.
조금 더 의미있는 단위(객체)로 나누기 때문에 코드를 이해하거나 다른 프로그램에서 재사용을 하기에도 훨씬 편리하다.
꼭 전체가 완성되지 않아도 일부 기능만 테스트해볼 수 있다.
단점
코드를 잘 나누고 설계하는 것이 어렵다. (코드 작성 전 설계에 많은 노력이 든다)
규모가 작아 스스로 할 수 있는, 데이터를 크게 신경쓰지 않아도 되는, 이후 변경될 염려가 거의 없는 경우에는 설계과정이 비효율적
사람이 이해하고 작성하기 편한 방식으로 코드를 분리하다 보니
컴퓨터가 이해하는데 시간이 걸려 실행 속도가 느려지거나, 저장 공간을 많이 차지하기도 한다.
객체 지향의 장단점 | |
장점 | 단점 |
1. 유지 보수에 용이함. 2. 가독성이 높음. 3. 재사용하기 좋음. 4. 테스트 용이함. |
1. 설계에 많은 노력 필요함(어려움). 2. 규모가 작은 프로젝트에는 비효율적 3. 속도가 중요하거나 주어진 자원 극도로 활용하는 경우 부적합. 4. 임베디드와 같은 특정 분야에는 부적합. |
- 객체 지향 언어를 쓰면 좋은 곳
대형 프로젝트(규모가 큰), 많은 데이터를 다루는 프로그램
- 객체 지향 언어를 쓰면 안좋은 곳
극도로 빠른 실행 속도가 필요한 분야, 저장장치나 성능이 제한적인 기기(스마트 워치, 스마트TV, 스마트 냉장고)에서 돌아가는 프로그램
07. 두 번째 패러다임: 변수의 데이터 타입
- 자료형 : 변수의 데이터 타입 지정
-> 이에 따라 언어가 구분됨.
간단하고 편리하지만 불완전하게(오류발생가능) 만들 것인가 VS 복잡하고 불편하더라도 안전하게(정밀하게) 만들 것인가
복잡하더라도 제약 = 안전장치 역할을 하기 때문에 나눠서 코드를 만들 때 오히려 더 좋을 수 있다.
-> 프로그래밍 언어의 문법을 두 부류로 나눌 수 있다.
08. Dynamic typing vs Static typing
추구하는 방향이나 가치관이 다름 -> 일종의 프로그래밍 언어 패러다임
나름대로의 장점이 있기 때문에 많이 사용함.
- 2가지로 프로그래밍 언어의 문법 분류
1. Dynamic typing
: 변수의 자료형을 미리 지정하지 않는 언어 -> 실행될 때 정해주는 언어
특징
1. 간결하고 편리함 추구 -> 컴퓨터적 구조가 생략되는 경우가 많기 때문 -> 대신 실행속도가 조금 느림 (발전을 통해 많이 극복함)
2. 코드에 어려운 표현이 적음 -> 코드의 내용이나 로직이 눈에 쉽게 들어옴
3. 작은 프로젝트를 손쉽게 만들고자 하는 경우, 실행 속도에 민감하지 않은 프로젝트에 사용
언어 예시 : Python, Ruby, php, JS, Perl
2. Static typing
: 변수의 자료형을 미리 지정하는 언어 ->
특징
1. 명확하고 정교함 추구 -> 컴퓨터적 구조가 코드에 있어 코드가 길어짐 -> 대신 컴퓨터적 구조가 눈에 딱 들어옴
-> 사람이 컴퓨터적 구조를 많이 적어주기 때문에 컴퓨터의 입장에서 고민이 줄어 실행속도가 더 빠름.
2. 제약이나 규칙이 많음 -> 실수를 시스템적으로 방지하고 더 체계적으로 코드를 작성하기 위해
3. 규모가 크고 여러 사람이 협업하는 복잡한 프로젝트에 더 적합
언어 예시 : Java, Kotlin, C, C++, Haskell
Dynamic typing vs Static typing | |
Dynamic typing | Static typing |
1. 코딩 속도가 빠르다 2. 실행 속도가 느리다 3. 코드 내용이 눈에 잘 들어온다 4. 배우기 쉽다 5. 혼자서 빠르게 하는, 작고 단순한 프로젝트에 적합 |
1. 코딩 속도가 느리다 2. 실행 속도가 빠르다 3. 코드 구조가 눈에 잘 들어온다 4. 배우기 어렵다 5. 여러 사람이 협업하는, 크고 복잡한 프로젝트에 적합 |
'Daily 일상 기록 > 인강 기록' 카테고리의 다른 글
컴퓨터 개론 03. 프로그래머의 세계 이해하기 (0) | 2021.07.27 |
---|---|
컴퓨터 개론 02. 프로그래밍 언어 이해하기 (3) (0) | 2021.07.26 |
컴퓨터 개론 02. 프로그래밍 언어 이해하기 (2) (0) | 2021.07.21 |
컴퓨터개론 01. 프로그래밍 시작하기 in Python (2) (0) | 2021.07.18 |
컴퓨터개론 01. 프로그래밍 시작하기 in Python (0) | 2021.07.16 |