본문 바로가기

Web Development/CommonSense

[4장] 프로그래밍 언어(개요/절차지향/객체지향)

프로그래밍언어를 마지막으로 컴퓨터의 기초 단원이 마무리됩니다.

다음 단원부터는 본격적으로 좀 더 심층적인 운영체제/데이터베이스/네트워크 등

컴퓨터의 기술근간에 대해 알아 볼 수 있을 것 입니다.

 

그래서 이번 주제에 다루게 될 프로그래밍 언어 단원에서는

프로그래밍언어를 배우기 전 알아두고 시작하면 좋을 기초적인 내용들을 위주로 포스팅을 하게됩니다.

 

☞ 본 포스팅은 공부 내용을 바탕으로 정리하는 것입니다. 주관적이며 정확하지 않은 내용이 포함 되어있을 수 있습니다.

☞본 포스팅은 한빛출판사의 '컴퓨터사이언스'책을 공부한 내용을 토대로 요약한 내용입니다.

 

 

1. 프로그래밍언어란?

 

'컴퓨터와 사람이 의사소통을 하기 위한 도구'로 정의됩니다.

이러한 프로그래밍언어는 '저급언어'와 '고급언어'로 구분되며,

'고급언어'는 다시 '절차지향언어' 와 ' 객체지향언어'로 구분됩니다.

 

자세히 들어가기 전에 큰그림 잡고 시작할께요 !

내가그린그림..

 

 

 

2. 저급언어&고급언어

 

저급언어에는 기계어와 어셈블리어가 있다는 것을 확인 할 수 있을 것 입니다.

 

 

A. 저급언어

 

①기계어(Machine Language)

 

0과 1로 구성된 2진수 언어입니다.

'0100100111'

이런식으로 생겼다고 하니, 컴퓨터에게 가장 가까운 언어겠죠?

다만, 최근에는 거의 사용되지 않고 어셈블리어로 대체되었다고 합니다.

 

②어셈블리어(Assembly Language)

 

기계어의 명령 01010101001 이렇게 생긴걸 기호로 바꾸어 표현했다고 합니다.

'LDA'

'CMA'

010101001 보다는 낫네요 -_-^..

하지만, 단순히 기계어를 기호로 바꾼것에 불과해서 아직도 알아보긴 어렵습니다.

 

 

B. 고급언어

 

고급언어는 기술이 날로 발전해가는 가운데,

사람들의 프로그램 요구사항이 많아지는 가운데, 더 쉽게 쓰기위해 만들어진 언어입니다.

이러한 고급언어는 우리가 요즘 코딩을 배우면 공부하는

C, Java, Python등을 포함해, 포트란, 코볼, 파스칼, C++, 스몰토크 등이 있습니다.

예를들어, 'print('Hello Python')' 예시를 보시면, 영어 그대로 술술 읽히지 않나요?

우린 코딩배우기 참 좋은 시대에 살고 있는 것 같습니다 ㅎㅎ

이러한 고급언어는 '절차지향 프로그래밍 언어'와 '객체지향 프로그래밍 언어'로 분류됩니다.

바로 다음 파트에서 조금 더 자세히 알아보도록 하겠습니다.

 

 

3. 절차지향 VS 객체지향

 

① 절차지향 프로그래밍

 

절차지향 프로그래밍은 90년대 이전에 나온 개념입니다.

대표적인 언어로는 'C언어', '파스칼', '코볼' 등이 여기에 해당됩니다.

절차지향프로그래밍이란, '프로그램 코드를 순서대로 작성하고 실행하는 언어' 이고,

예를들어, '얼음을 얼리는 과정'을 수행하기위해서는

1. 냉장고를 연다

2. 얼음통을 뺀다.

3. 물을 붓는다

4. 냉동실에 넣는다.

5. 문을 닫는다.

이처럼 순서대로 쓰는게 절차지향 프로그래밍입니다.

이러한 절차지향프로그래밍은 순서를 자유자재로 바꾸거나, 복잡한 로직을 짜기가 다소 어렵다는 단점이 있습니다.

이러한 한계점의 극복을 위해 '구조적 프로그래밍'이라는 객체지향과 유사한 개념이 추가 되었습니다.

 

 

② 객체지향 프로그래밍

 

90년 이후로 등장한 개념으로 'JAVA', 'C++', 'Python' 등 최근 언어는 모두 적용되어 있습니다.

원하는 기능 및 데이터를 묶는 캡슐화를 시킨 후, 필요할때 마다 부품처럼 가져다 쓰는 개념입니다.

예를들어볼께요, '레고놀이'에서는

'ㄴ'자 모양의 팔을 만들었습니다.

그런데 내가 만든 A라는 케릭터의 팔로 사용하다가 B라는 케릭터의 팔로 사용하려고 합니다.

그럼 A의 'ㄴ'자 팔을 떼서, B라는 케릭터에게 붙여줍니다.

이와 같이 위에서는 '팔'로 예를 들었는데 부품을 모아서 만든 것을 묶어 객체를 만들고 이를 다양한 분야에 활용하는 것이라고 이해할 수 있습니다.

 

최근 코딩공부를 위해서는 유지보수의 편의성 등의 목적을 위해 객체지향 프로그래밍 언어를 학습하게 되는데요.

학습전에 알아두면 좋을 개념들을 간단히 소개해 드리겠습니다.

 

 

클래스 & 객체

 

클래스(Class) : 속성을 가진 객체가 모여 일반화된 범주로 묶인 것. (EX : 자동차)

객체(Object) : 속성과 기능을 한곳에 묶어 캡슐화 한 것.

(EX : 벤츠 자동차 = 엔진/차종/모양/크기 등 고유속성을 가지고, 기능을 수행할 수 있다)

속성(Attribute) : 각 객체의 고유한 특징. (EX: 엔진, 자동차 색깔, 자동차 크기, 가솔린&디젤, 전기충전)

기능(Function) : 객체가 할 수 있는 행동 (EX : 전진, 후진, 정지)

내가 그린그림..

 

위 그림에서 보다 싶히, 클래스라는 큰 범주내에, 여러 종류의 자동차들이 있고, 그 자동차들을 속성이라는 고유한 값으로 분류한 뒤, 자동차가 가진 기능들을 분류하고, 이를 다시 객체로 묶어 캡슐화하는 과정을 거쳤습니다.

 

 

추가개념

 

상속(Inherit) : 자동차라는 클래스 안에 예를들어 작은 스포츠카라는 클래스가 있다고 가정합시다.

그렇다면 스포츠카 클래스는 자동차가 가진 속성과 기능을 모두 그대로 가져올 수 있습니다.

이를 '상속'이라고 합니다.

 

메세지(Mssage) : 메세지는 객체 간 명령 즉, 객체가 기능을 수행하도록 명령 하는 것을 의미한다.

이를 프로그램화 시키면 '메소드(Method)'라고 한다.

예를들어, 스포츠카에게 "전진해!"라고한다면 "전진해!"부분을 메세지or메소드라고 합니다.

 

추상화(Abstraction) : 객체가 상대 객체에게 필요로하는 부분만을 보여주고, 다른 세부적인것은 감추는 것.이라고 정의된다.

 

예시를 살펴보자,

"벤츠 자동차가 고장나 벤츠 A/S센터에 전화를 해서 A/S를 맡긴다" 라는 예시는, 추상화가 된 것이다.

구체적으로 누가 고쳤는지는 알 필요없으니 말이다.

 

"벤츠 자동차가 고장나 벤츠 "Arberto"라는 엔지니어를 찾아 "Arberto"에게 전화를 한다."

이는 추상화되지 않은 사례이다. 구체적으로 누구인지 지목해야 하기 때문이다.

 

추상화 되지 않을경우 상당히 번거롭고, 찾기 어려운 문제점이 존재합니다.

 

캡슐화(Encapsulation) : 캡슐화란 앞에서도 살펴본 바와같이, 속성/기능을 한곳에 묶는 것이다. 거기에 추상화시키는 개념을 추가시키는 것을 캡슐화라고 합니다. 이러한 캡슐화를 통해 코드의 재사용성, 유지보수의 편의성, 보안성을 향상시킬 수 있습니다.

 

다형성(Polymorphism) : 위에 '상속'의 예시에서 자동차라는 상위클래스 안에 스포츠카의 하위클래스 예시를 들었던 것을 살펴보면, 전기차 클래스 또한 존재한다. 전기차와 스포츠카는 둘다 에너지를 넣을 수 있지만, 전기차는 전기를 충전해야하고 스포츠카는 기름을 넣어줘야합니다. 이러한 것을 '다형성'이라고 표현합니다.

 

 

 

 

 

 

 

 

휴... 객체지향 복잡시럽죠? ㅠㅠ..

다음은 프로그램이 어떻게 개발되는지 개발과정에 대해 간단히 짚고 넘어가겠습니다.

 

 

4. 프로그램 개발과정

1단계 [요구사항 분석]

고객과 상의를 통해 문제를 정의하고, 필요한 것을 구체화하는 단계입니다.

2단계 [프로그램 설계]

1단계에서 분석한 것을 바탕으로 코딩에 사용해야 할 논리를 정리해보는 단계입니다.

3단계 [코딩 및 컴파일]

위 2단계에서 설정한 논리를 바탕으로 실제 코딩을하고 코드를 기계어로 바꾸는 컴파일 과정을 거칩니다.

4단계 [디버깅&테스트]

3단계에서 완성시킨 프로그램이 잘 돌아가는지 버그가 없는지 확인하는 '디버깅'단계를 거친 후, 구동 테스트를 합니다.

 

 

 

 

이젠 마지막으로 머리식힐겸 ~ 프로그래밍 언어들이 어떻게 발전해왔는지 간단히 살펴보고 마치겠습니다.

 

 

5. 프로그래밍 언어의 역사

프로그래밍 언어는 수백수천개가 넘는다고 해요. 그런 프로그래밍언어가 저급언어부터 현재까지 어떻게 발전해왔는지 간략하게 살펴보겠습니다.

 

1950년대 : 이 때 처음 '포트란' 이라는 어셈블리어가 탄생하게 되고, 이를 계기로 프로그래밍 언어가 발전하게되는 발판이 되었다고 합니다.

 

1960년대 : 이때는 다양한 과학기술개발을 위한 프로그래밍 언어들이 나오게 되는데요, 동시에 사무처리를 위한 프로그래밍 언어인 '코볼(Cobol)'이 등장합니다. 코볼은 우리가 사용하는 '영어'와 상당히 유사해 이용이 많이 편리해졌다고 합니다.

 

1970년대 : 70년대에는 기술발전으로 인해 소프트웨어의 복잡성이 더해지면서 이를 해결하고자 우리가 알고있는 'C언어'와 '파스칼(Pascal)'이 등장하게됩니다.

 

1980년대 : 컴퓨터 초보자와 학생들이 배울 수 있는 '베이직(Basic)'이라는 언어가 등장 하게 됩니다.

 

1990년대 : 본격적으로 '객체지향'의 개념과, GUI개념의 강화가 본격적으로 이루어지면서, 'C++', 'Java', 'Visual Basic'언어들이 등장하게 됩니다.

 

2000년대 : 사람들은 언어 자체의 완벽성/안전성 보다 더욱 욕심을 부려 간편하고 편리한 프로그래밍 언어를 갈구합니다. 이에 'PL/SQL', 'Visual C++' 등이 등장하게 됩니다. 또한, 이시기에 객체지향 + WEB이라는 컨셉이 더해져 기존 HTML의 한계극복을 위한 'XML', 3차원 표현을 위한 'VRML'등이 등장하게 됩니다.

 

현재 : 5세대 프로그래밍 언어라고해서, 인공지능을 이용해 우리가 사용하는 자연어로 처리하는 기법에 대한 연구를 활발히 진행중에 있습니다.

 

 

 

 

 

- E N D -

 

 

이로써 프로그래밍 언어 파트가 마무리됩니다.

 

다음 파트에서는 '컴퓨터 운영체제'에 대한 내용을 다뤄보도록 하겠습니다.

'Web Development > CommonSense' 카테고리의 다른 글

[6장] 데이터베이스  (0) 2020.07.11
[5장] 운영체제  (0) 2020.07.10
[3장] 컴퓨터 구조  (0) 2020.07.04
[2장] 컴퓨터의 정보 표현  (0) 2020.07.03
[1장] 컴퓨터의 개요  (0) 2020.07.02