-
OOP (Object Oriented Programming) - 객체 지향 프로그래밍concept/javascript 2020. 5. 8. 18:00
본 포스팅에서는 컴퓨터 세상에서 전반적으로 프로그래밍이 어떤 것인지 먼저 알아 보고
그 중에서도 자바스크립트의 특징인 객체 지향 프로그래밍에 대해서 알아볼 것이다.
먼저 객체 지향 프로그래밍에 대해서 알아보기 전에 컴퓨터 프로그래밍이 무엇인지 알아보자.
그래서 지금까지 코드 짜는 것을 열심히 배우긴 배웠는데..
(내가 프로그래밍을 하고 있는게 맞나 모르겠네)
그럼 컴퓨터 프로그래밍이 뭐지?
컴퓨터 프로그래밍이란?
: 알고리즘의 모음
: step by step 프로세스의 모음이다.
그럼 그 프로그래밍을 어떻게 하지?
프로그래밍 언어를 통해서 해야한다!
프로그래밍 언어는
프로그래머가 프로그램을 개발할 수 있도록 도와주는 tool 이다.
언어에는 3가지 타입이 있다.
1. Machine Languages (기계어)
2. Assembly Languages (어셈블리어)
3. High-Level Languages (고급언어) - javascript!
저급에 가까울 수록 컴퓨터화 된 언어
고급에 가까울 수록 인간의 언어와 비슷함
Machine Languages
: 컴퓨터가 알아들을 수 있는 0, 1로 조합되어 있다.
이렇게 이루어져있다보니까 사람이 프로그래밍을 하기가 너무너무 어려움...
그래서 이 0, 1을 조금 더 인간화 시킨 것이
Assembly Languages
근데 이건 명령어가 10개 정도 밖에 없다. (or, and 등등)
변수도 만들 수 있는 개수가 정해져 있다.
불편한 점이 너무 많아서
Assembly Languages로 몇몇 함수를 만들어 놓고
더 인간화 시킨 것이 바로
High-Level Languages
각 언어의 특징은 아래와 같다.
기계어, 어셈블리어는 잘 모르겠지만
지금까지 배운 자바스크립트가 고급언어라고 하니
고급언어를 알아보자
고급언어에는 절차지향적, 객체지향적 언어가 있다.
절차지향적 언어는 순차적으로 진행되게끔 만드는 것 (C, pearl 등)
객체지향적 언어는 객체로 이루어짐. 또한 재사용성이 높다.
예를 들어 Class 로 새로운 Object를 만들 수 있다.
여기서 Class 로 만든 Object가 바로 instance 이다.
construction mode를 잘 떠올려 보자.이전 포스팅 참고 : 객체 지향 자바스크립트
" Object is an instance of a class "
Object 에서는 4가지 기본 컨셉이 있다.
Encapsulation 캡슐화
Inheritance 상속
Abstraction 추상화
Polymorphism 다양한 형태 (다형성)Encapsulation 캡슐화
외부에서 속성들을 Class 안에 그 만들어지게 될 instance의 속성이나 메소드를 정의해 놓는 것. 캡슐화!
즉 Class 라는 object (blue print : 청사진)안에 속성 및 메소드들을 저장해놓는 것이다.
이것이 바로 코드의 재사용이 용이할 수 있는 이유!
Inheritance 상속
부모의 특징을 물려받는 것
자식은 부모의 특징에서 다른 특징 몇 가지가 추가될 수 있다.
Abstraction 추상화
속에는 되게 복잡하게 되어 있는데 사용자가 쓰기에는 간단한 것
예를 들어 스마트폰이 어떻게 만들어졌는지 사용자는 모르지만 사실 그 내부 구조는 매우 복잡한 것
함수로 예를 들면 평균을 구하는 함수가 있는데 사용자는 그 함수에 전달인자만 넣어주면 알아서 계산해서 값이 나온다.
Polymorphism 다형성
위의 세가지 특성과 연관되어있다. 특히 상속이랑 연관되어있음
동물에게는 짖다라는 특성이 있는데 똑같은 짖다라도 개 는 멍멍 고양이 는 야옹~ 이라는 다양한 형태로 변하는 것
객체 지향은 한 마디로
" 사람이 세계를 보고 이해하는 방법을 흉내낸 방법론"
참고할만한 링크:
https://www.slideshare.net/haddara1/introduction-to-object-oriented-programming-42639494
https://www.youtube.com/watch?v=PFmuCDHHpwk
'concept > javascript' 카테고리의 다른 글
prototype vs __proto__ vs constructor (0) 2020.05.09 Instantiation Patterns (인스턴스화 패턴) (0) 2020.05.08 ++, -- 를 앞에 쓴 것과 뒤에 쓴 것은 무슨 차이가 있는 것일까? (0) 2020.05.02 recursion (재귀함수) (0) 2020.04.18 this / call(), apply(), bind() (0) 2020.04.14