[컴퓨터 개론] 프로그래밍 언어 이해하기
업데이트:
프로그래밍 언어를 분류하는 두 가지 기준
프로그래밍 언어는 영어, 숫자, 기호로 이루어져있다.
얼핏보면 프로그래밍 언어끼리 비슷해 보이지만, 자료형, 변수, 함수, 파라미터를 통해 각 언어의 다른점을 알 수 있다.
- Python
name = "James"
age = 23
- Java
String name = "James";
int age = 23;
- C
char name[6] = "James";
int age = 23;
위 세가지 모두 name 변수에 James를 저장하고, age 변수에 23을 저장하는 코드이다.
처음에는 단 하나의 프로그래밍 언어가 있었으나, 용도, 상황에 따라 다양한 이유로 불편함을 느껴 단점을 보완한 새로운 언어를 개발하게 되어 프로그래밍 언어가 계속해서 등장하게 된다.
첫 번째 패러다임: 객체 지향 프로그래밍
프로그래밍 언어는 절차 지향/ 객체 지향으로 분류할 수 있다.
어느 방식이 좋은지는 어떤 프로그램을 만드느냐에 따라서 다르다.
객체 지향 프로그래밍 이해하기
- 객체 지향 프로그래밍이 등장한 배경
한 프로그램을 여러 개발자가 협업을 해서 만들게 된다.
예전에는 전체 융곽을 만들고, 어떤 기능이 필요한지 기획 후 개발자들 마다 기능을 나눠 분담하고, 다시 합치는 작업을 한다.(Top-down 방식이라고 한다.)
Top-down방식은 전체를 합쳐야지만 제대로 동작하는지 알 수 있기 때문에 하나의 기능이 구현이 안 된다면 실행이 안 된다는 단점이 있다.
모두 데이터로 연결되어있기 때문에 하나의 기능을 수정하려면 전체 프로그램을 수정해야 한다.
이런 단점을 보완하기 위해, 개발자들은 기능으로 나누지 않고 한 가지 기능과 관련 데이터를 하나로 묶어 관리하도록 한다.
이 묶음을 Object(객체)라고 한다.
객체를 적용해서 프로그래밍을 한다고해서 객체 지향 프로그래밍이라고 부른다.
객체 지향의 장단점
장점
객체 지향 프로그래밍을 하면 데이터나 기능에 변화가 생기더라도, 관련된 객체만 신경 쓰면 되기 때문에 프로그래밍하기 훨씬 편해진다.
그리고 조금 더 의미 있는 단위로 나누기 때문에 코드를 이해하거나, 다른 프로그램에서 재사용하기에도 수월하다.
꼭 전체가 완성되지 않아도 일부 기능만 사용해볼 수도 있기 때문에 테스트에도 더 유리하다.
- 유지 보수에 용이하다.
- 가독성이 높다.
- 재사용하기 좋다.
- 테스트가 쉽다.
단점
객체 지향의 단점은 코드를 잘 나누고 설계하는 것이 어렵다는 점이다.
코드를 작성하기 전에 설계부터 많은 노력이 든다.
굳이 객체 지향적으로 만들 필요가 없는 경우(규모가 작아 분담하지 않아도 되는 일, 데이터를 크게 신경쓰지 않아도 되는 일, 바뀔 염려가 거의 없는 일 등)엔 설계 과정 없이 그냥 바로 만드는게 훨씬 더 효율적이다.
또한, 사람이 이해하고 작성하기 편한 방식으로 코드를 나눠두다 보니, 컴퓨터가 이해하는데 시간이 걸려 실행하는 속도가 느려지거나, 저장 공간을 많이 차지한다.
- 설계가 어렵다.
- 작은 규모의 프로그램에서는 객체 지향적으로 작성하는 것이 더 오래 걸릴 수 있다.
- 극도로 빠르거나, 주어진 자원을 극도로 활용해야 하는 경우에는 좋지 않다.
- 임베디드와 같은 특정 분야에는 부적합하다.
객체 지향 언어를 사용하면 좋은 곳
많은 데이터를 다루는 프로그램이나, 규모가 큰 프로젝트같은 경우에는 객체 지향의 장점이 더 부각된다.
특히 요즘은 모든 프로그램에 데이터가 많아졌기 때문에, 객체 지향 프로그래밍을 사용하는 것이 좋다.
객체 지향 언어를 사용하기 적합하지 않은 곳
극도로 빠른 실행 속도가 필요한 분야 혹은 저장 장치나 성능이 제한적인 기기(스마트 워치, 스마트TV, 스마트 냉장고)에서 돌아가는 프로그램을 만들 때는 객체 지향을 안 쓰는 것이 유리하다.
두 번째 패러다임: 변수의 데이터 타입
변수
파이썬, 루비는 변수명 앞에 데이터 타입을 명시하지 않고, 자바, C는 변수명 앞에 데이터 타입을 작성한다.
파이썬, 루비는 변수의 자료형을 지정하지 않기 때문에 변수에 어떤 자료형이든 들어갈 수 있지만, 자바와 C는 지정한 자료형과 일치하는 데이터만 들어갈 수 있다.
함수
- 파이썬
def print_sum(a,b):
- Java
public void print_sum(int a, int b){}
마찬가지로 함수를 작성할 때도 자바는 파라미터마다 자료형을 지정해주어야 한다.
왜 다르게 만들었을까?
파이썬과 루비 같은 A그룹은 간편함과 편리함을 위해 만들어졌다.
간편하고 편리하게 만들 수 있지만, 문제를 확인 할 안전 장치가 없어 실행 시점에서 오류를 발생할 가능성이 많다.
자바와 C같은 B그룹은 복잡하고 불편하고 생각할 것이 많지만 코드를 더 정밀하게 만들 수 있다.
코드를 작성할 때, 실행할 때마다 필수적으로 확인 절차를 거치게 되며, 잘못된 부분이 있다면 컴퓨터가 에러 표시를 해준다.
Dynamic typing vs. Static typing
Dynamic typing
변수에 자료형을 정해주지 않는 언어를 Dynamic typing
언어라고 한다.
변수에 자료형을 미리 정하지 않고, 실행될 때 정해지는 언어이다.
간결하고 편리한 코드를 추구하기 때문에 컴퓨터적 구조가 생략되는 경우가 많다.
그리고 코드에 어려운 표현이 적어 코드의 내용과 로직이 이해하기 쉽다.
작은 사이즈의 프로그램을 만들기 좋다.
컴퓨터의 구조가 생략되어 있어 컴퓨터가 스스로 생각하고 판단해야 하기 때문에 실행속도가 느린 편이다.
- 간편함과 편리함을 추구한다.
- 컴퓨터적 구조를 생략해서 코드의 내용이 눈에 잘 들어온다.
- 사람이 코드를 이해하기 편해서 학습하기 쉽다.
- 컴퓨터적 구조를 생략하기 때문에 실행 속도에 민감한 곳이나 성능이 좋지 않은 환경에서 활약하기 어렵다.
Dynamic typing 언어 : 파이썬, 루비, 자바스크립트, PHP, 펄 등
Static typing
변수에 자료형을 표시해서 실행하기 전에 변수의 타입을 지정해주는 언어를 Static typing
언어라고 한다.
더 명확하고, 정교한 표현을 추구하기 때문에 컴퓨터적 구조를 확인할 수 있다. 하지만 코드에 컴퓨터적 구조가 나타나있어 코드가 길어진다.
Dynamic typing에 비해 제약이나 규칙이 많다. 그 이유는, 사람의 실수를 시스템적으로 방지하고 더 체계적으로 코드를 작성하기 위해서이다.
많은 사람이 협업해서 만들어야하는 규모가 크고 복잡한 프로젝트에 사용하기 좋다.
코드를 작성할 때 컴퓨터적 코드를 적어주기 때문에 컴퓨터 입장에서 생각할 시간이 적어 실행 속도가 빠르다.
- 안정성과 정교함을 추구한다.
- 컴퓨터적 구조를 코드에 적어주기 때문에 코드의 구조가 눈에 잘 들어오지 않는다.
- 코드가 복잡해져서 배우기 어렵다.
- 컴퓨터적 구조 덕분에 컴퓨터가 고민을 덜 하게 되어 실행 속도가 중요한 곳에서 활약할 수 있다.
- 임베디드, 실시간 투자, 인공 지능 분야에서 활약한다.
Static typing 언어 : C, C++, Java, 코틀린, 하스켈 등
[코드잇-컴퓨터 개론] https://www.codeit.kr/courses/intro-to-computer
공유하기
Twitter Google+ LinkedIn
댓글남기기