처음에는 코딩만 계속해서 공부했지만, 점점 단순히 코딩만 공부를 할 것이 아니라 CS를 '필요로' 해지는 것 같다.
'내가 CS를 잘 알고 있다면 조금 더 구현하기가 쉬울까?'
'얘는 도대체 어떤 원리로 작동하는 것일까?'
여러가지로 궁금해지는데, 어디서부터 CS를 봐야하나 싶었는데 Javascript를 공부하다보면 객체지향 이라는 말을 하도 많이 들어서 이것에 대해서 먼저 간단하게 정리를 해야겠다!
프로그래밍은 크게 두 가지로 구분 될 수 있다.
1. 절차적 프로그래밍 (Imperative and Procedural Programming)
2. 객체지향 프로그래밍 (Object-Oriented Programming)
절차적 프로그래밍
- OOP
- 프로그래밍이 순차적으로 수행하도록 만든 언어이다.
- 순차적으로 수행하므로 이해하기가 쉽지만 다양한 비즈니스 케이스를 구현하는데 한계를 보인다.
- 대표적인 예) 포트란(Fortran), 알골(Algol) 등 1960~1970년대 만들어진 언어
객체지향 프로그래밍
- IPP
- 객체의 이벤트에 따라서 동작하도록 만든 언어
- 프로그램 순서대로가 아니라 객체에게 발생하는 이벤트에 따라 이에대한 메소드를 호출하면서 실행되므로 비절차적인 언어
- 대표적인 예) Java, Javascript, C++, C#, Swift 등
그럼 이 둘은 각각 어떤 차이가 있을까?
절차적 프로그래밍
- 프로그램 전체가 유기적인 연결이 되어있다
- 컴퓨터 처리구조와 유사해 속도가 빠르다
- C(시스템 프로그래밍), ALGOL, FORTRAN(과학기술계산용), COBAL(사무처리용)
- but, 프로그램 분석이 어렵고 유지보수나 수정 등이 어렵다
객체지향 프로그래밍
- 코드의 재활용성이 높다
- 사용자와 개발자 사이의 이해를 쉽게 만들어준다.
- 대형 프로그램 작성에 용이
- 관리가 비교적 쉽다
- 개발 및 유지보수가 용이 그러나, 구현 시 처리시간이 지연된다.
마지막으로 이 객체지향(OOP)의 특징에 대해서 살펴보자!
- 캡슐화
- Encapsulation
- 데이터(속성)와 함수를 하나로 묶음으로써 재사용에 용이
- 객체 내에 존재하는 메소드를 하나로 묶고 실제 내용을 감춤으로써 객체를 보호하는 것
(외부 객체는 객체 내부 구조를 알지 못하며 객체가 노출해서 제공하는 메소드만 이용가능)
- 정보 은닉
- Information Hiding
- 가장 중요한 개념 / 다른 객체에서 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용
- 추상화
- Abstraction
- 불필요한 부분은 생략하고 중요한 것만 중점을 두어 개략화, 모델화
- 상속성
- Inheritance
- 부모/상위 클래스의 속성과 연산을 하위/자식 클래스가 물려받는다
- 다형성
- Polymorphism
- 하나의 요청에 고유한 방법으로 응답한다