OOP(Object Oriented Programming)
Code/JavaScript

OOP(Object Oriented Programming)

반응형

오늘은 OOP에 관해 공부한 내용을 포스팅 해보고자 한다.

 

OOP (Object Oriented Programming)

무엇인가를 해결하기 위한 논리적 사고의 단계들을 알고리즘이라고 한다.

코드를 작성하고, 논리를 구체화하여 구현하는 과정이 필요한 모든 컴퓨터 프로그래밍 또한 알고리즘이라고 볼 수 있다.

 

컴퓨터 프로그래밍 언어는 크게 3가지로 구분 할 수 있다.

- 기게어 (Machine languages)

- 어셈블리어 (Assembly languages)

- 고급언어 (High-Level languages)

 

1. 기계어 (Machine languages)

기계어는 근본적인 컴퓨터의 언어라고 볼 수 있다.

0과 1로 되어있으며, [ ex) 1010110101010, 0001100011 ] 사람이 보기에는 그냥 0과 1의 반복으로 밖에 보이지 않는다.

그렇기 때문에 기계어만을 사용한 프로그래밍은 굉장히 어렵다.

 

2. 어셈블리어 (Assembly languages)

어셈블리어는 기계어로 구현하기 힘들었던 컴퓨터 프로그래밍에 조금 더 쉽게 접근 할 수 있도록 도왔다.

사용 가능한 명령어 갯수와 변수가 지정되어있으며, cpu 내부 프로그래밍에 주로 사용되어 cpu 계열에 따라 정의되어있다.

 

3. 고급언어 (High-Level languages)

프로그래밍 언어는 기계 친화적일 경우 low-level 에 가깝고, 인간 친화적일 경우 high-level 에 가깝다고 할 수 있다.

c 언어의 경우 어셈블리어와 가깝기 때문에 상대적인 low-level 이며, 자바스크립트, 파이썬 (javaScript, python...etc) 등을 인간 친화적인 고급 언어라고 볼 수 있다.

 

고급 언어가 인간 친화적이라는 것은, 영어와 비슷하기 때문에 사람이 읽는 데에 무리가 없다고 생각하면 편할 것 같다.

그리고, 언어를 기계어로 다시 변환해주는 컴파일 과정이 없다. 고급 언어 중 자바스크립트를 예로 들자면 자바스크립트는 코드를 컴파일하지 않고, line by line으로 읽으면서 실행한다.

 

또한 고급 언어는 역사적으로 보았을 때, 크게 2가지로 구분 할 수 있다.

- 절차 지향 언어 (Procedural languages) 

- 객체 지향 언어 (Object-Oriented languages) OOP

 

1.  절차 지향 언어 (Procedural languaes)

초기 고급 언어는 절차 지향 언어로 불렸으며, 절차 지향 언어는 프로그램 안에 작동 순서를 어떠한 상관관계로 설정하여 작동할 것인지가 주된 구현의 핵심이다.

절차 지향 언어 - C, COBOL, Fortran, LISP, Perl, HTML, VBScirpt 

 

2. 객체 지향 언어 (Object-Oriented languages) OOP

우선 OOP라는 것은 라이브러리나 특정 언어에 대한 명칭이 아닌 프로그래밍 세계에서의 철학을 의미한다.

즉, 사람이 세계를 보고 이해하는 방법을 흉내낸 방법론이다.

 

OOP는 이전까지 사용되었던 절차 지향적인 언어와 다른 프로그래밍 집합인 객체 (Object)을 사용한다.

프로그램을 구성하는 모든 요소가 객체로 그룹화가 되기 때문에, 주요 객체 지향 프로그래밍 개념을 통해 재사용 가능하도록 만든다.

 

글로만 봤을 땐, 이해하기 힘들기 때문에 아래 코드를 첨부한다. 



class People {
  constructor(name, gender, age) {
    this.name = name;
    this.gender = gender;
    this.age = age;
  }
}

let test1 = new People('demmun', 'female', '23');
let test2 = new People('juhyuk', 'male', '27');

console.log(test1); // People {name: "demmun", gender: "female", age: "23"}
console.log(test2); // People {name: "juhyuk", gender: "male", age: "27"}

console.log(test1.name); // "demmun"
console.log(test2.age); // "27"

class - 하나의 모델이 되는 청사진 (blueprint)를 만든다. ex) People

instance - 청사진을 바탕으로 한 객체(Object)를 만드는 프로그래밍 패턴이다.  ex) test1, test2

 

각 Instance는 People이라는 클래스의 고유한 속성과 메소드를 갖는 것이다.

상기 코드를 보자면, People 클래스를 계속 재사용할 수 있는 것을 확인 할 수 있다. 

 

OOP의 기본 개념은 크게 4가지로 볼 수 있다. 

-  Encapsulation

-  Inheritance

-  Abstraction

-  Polymorphism

 

인캡슐레이션 (Encapsulation) : 클래스라는 객체에 속성들을 모두 쌓아놓는다. 

상속 (Inheritance) : 부모의 속성을 상속 받는 것

추상화 (Abstractiion) : 사용자 입장에서 인터페이스가 간단해야 하고, 내부적 기능 요소에 사용자가 직접적으로 접근하는 것도 줄어들어야 한다.

Polymorphism : 여러가지 형태라는 뜻이다. 모든 html의 태그의 부모는 HTMLelement를 부모로 갖고 있음, 상속이 없었다면 모든 요소마다 하나하나 속성을 부여해야 하나 스위치와 폴리모리즘이 가능한 관계로 일일히 속성을 부여하지 않아도 상속으로 기능을 구현할 수 있는 것이다.

 

 

 

반응형