프로그래밍 언어의 3가지 종류
- Machine Languages : 기계어, 0과 1로 조합된 native한 컴퓨터의 언어 → 코딩하기 매우 어려움!!
- Assembly Languages: 어셈블리어, 기초적이고 제한적인 명령어들이 있음, CPU 계열에 따라 정해져있음
→ 컴퓨터에서 처리하기전에 기계어로 변환되어야함
- High-Level Languages (Low-Level 과 비교해서) : 어셈블리어로 특정 언어를 만든 것이 우리가 흔히 사용하는 프로그래밍 언어
→ C는 어셈블리어와 매우 가까운 언어로 볼 수 있음
high-level 언어(컴파일언어) → (컴파일러) → 어셈블리어 → (어셈블러) → 기계어
high로 갈수록 flex, portable 하고 low로 갈수록 실행속도가 빠르고 코드가 압축적이고, 특정 machine에 종속적
High-Level 언어의 2가지 종류
- Procedural languages (절차지향적 언어)
프로그램안에 함수든, attribute 등 한번에 묶여져 있음
특징 : sequential set of linear commands, focus on 'structure'
대표적인 언어 : C, COBOL, Fortran ...
- Object-Oriented languages (OOP, 객체지향적 언어)
모든 것이 객체로 이루어져 있음, class 사용 (blueprints) → object 생성
특징 : 객체안에 property와 method
대표적인 언어 : java, C++, python, php, javascript, ruby ....
자바스크립트 → 초기에는 아니였지만 객체지향적으로
Class 와 objects
class : blueprints, 즉 prototype (객체를 만들기 위한 청사진!!), 객체를 만들기 위한 'constructor'를 가지고 있음
→ attributes or properties / methods 를 class에 정의
object : instance of a class
OOP의 기본적인 4가지 concepts
1. Encapsulation (캡슐화)
property나 method를 class안에 캡슐화
// encapsulation 하기 전
let baseSalary = 30000;
let overtime = 10;
let rate = 20;
function getWage(baseSalary, overtime, ratr) {
return baseSalary * (overtime * rate)
}
// encapsulation 화
let employee = {
baseSalary : 30000,
overtime : 10,
rate : 20,
getWage : function () {
return this.baseSalary * (this.overtime * this.rate)
}
};
emoloyee.getWage();
예를들어 많은 employee가 있을 때 캡슐화를 하지 않으면 baseSalary나 이런 것들을 일일히 전부 사람마다 할당해줘야하지만 캡슐화를 통해 그러지 않아도 됨
또한 해당 객체 내의 함수에 의해서만 데이터에 접근이 가능하기 때문에 정보 은닉이 가능
-> 정보 은닉을 통하여 데이터의 보호, 데이터의 높은 응집도와 낮은 결합도를 유지할 수 있다 -> 설계 변경에 유연하게 대처 가능
2. Inheritance (상속)
상위개념, 즉 부모(base class)의 특징을 하위개념, 즉 자식(derive class)이 물려받음
// 상속의 예
class Convertible {
// Key(private)
// speed : 155
// weight : 1600kg
// engine : ~
}
class Roadster extends Convertible {
// speed : 165
// weight : 1500kg
}
roadster는 convertible의 속성 등을 그대로 상속을 받지만 예를들어 speed나 무게 등이 바뀔 수 있다.
상속을 통하여
- 코드의 재사용을 증대 시킬 수 있다. 같은 기능을 또 구현하지 않아도 됨
- 상속 받은 개체에 추가적인 기능을 구현함으로써 폭넓게 사용할 수 있다.
3. Abstraction (추상화)
어떤 구체적인 개체들의 공통적인 특징(속성과 기능)을 파악해서 class에 구현하고 각 개체별(instance)로 구체화시켜 나가는 것
구체적인 개념에만 의존하여 만들 경우에는 새로운 개체마다 계속하여 추가하여야 하지만 추상화를 하면 그럴 필요가 없고
설계를 유연하게 변경할 수 있다.
4. Polymorphism (다형성)
약간 다른 방법으로 일을 하는 함수를 동일한 이름으로 호출하는 것
예를들어 모든 HTML의 모든 tag는 HTMLElement를 부모로 가지고 있고, tag들은 render가 되어야 하므로 render()함수가 필요하다. 그러면 이 render 함수를 각 tag에 일일히 정의해주는 것이 아니라 (상속의 개념과 엮어서) HTMLElement에서 render를 정의해주면 각 tag에서 상속을 받고 각 자 자기만의 방식으로 tag를 render한다.
(2) 편과 (3)편으로 이어집니다.
'프로그래밍' 카테고리의 다른 글
(200108) AWS - S3, EC2, RDS (2) (0) | 2020.01.09 |
---|---|
(200108) AWS - S3, EC2, RDS (1) (0) | 2020.01.08 |
(191207) Server, Client, API, Browser (0) | 2019.12.07 |
(191117) 객체지향 프로그래밍 (OOP) - (3) (0) | 2019.11.17 |
(191117) 객체지향 프로그래밍(OOP) - (2) (0) | 2019.11.17 |
댓글