Programming은 크게 다음과 같이 분류된다.
Declarative(선언형)과 Imperative(명령형)을 간단하게 비교하면 이러하다.
- 선언형: 무엇인가를 작업하기 위해 어떻게 진행할 것인지를 나열한다. (컵라면을 끓인다.)
- 명령형: 무엇인가를 작업하기 위한 방법을 정의한다. (뚜껑을 연다 -> 물을 붓는다 -> 면이 익을 때까지 기다린다.)
명령형은 다시 Procedural(절차지향)과 Object Oriented(객체지향)으로 나뉘는데,
|
|
출처: https://m.blog.naver.com/PostView.nhn?blogId=atalanta16&logNo=220249264429&proxyReferer=https:%2F%2Fwww.google.com%2F |
Procedural Programming(절차지향 프로그래밍)
Procedural Programming(절차지향 프로그래밍)은,
▶ 물이 위에서 아래로 흐르듯이 순차적으로 처리가 이루어지며, 프로그램 전체가 유기적으로 연결된다.
▶ 데이터를 중심으로 프로그램 구현
▶ 장점: 컴퓨터의 처리구조와 유사해 실행속도가 빠르다.
▶ 단점: - 실행순서가 정해져 있어, 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다.
- 유지보수가 어렵다.
- 디버깅이 어렵다.
▶ 대표적 언어: C언어
Object Oriented Programming(객체지향 프로그래밍)
Object Oriented Programming(객체지향 프로그래밍)은,
▶ 실제 세계를 추상화하여 객체 공통의 Property와 method를 추출한다.
ex) 휴대전화의 공통부분 : 통화한다(0), 사진을 찍는다(0) / 삼성에서 만들었다(x) 폴더블이다(x)
▶ 데이터와 절차를 하나의 덩어리로 묶어서 생각한다. (위의 그림 참조)
▶ 기능을 중심으로 프로그램 구현
▶ 특징:
1. Encapsulation (캡슐화)
- 은닉성: 묶은 내용 중, 외부에서 접근하지 못하는 Property와 method를 만들 수 있다. 외부와의 상호작용은 method를 통해 이루어진다.
- 데이터 알고리즘(데이터를 다루는 방식)을 하나의 묶음으로 정리한다. (변수와 함수를 Class로 묶는다.)
2. Inheritance (상속)
- 부모 class의 Property와 method를 자식 class에서 사용할 수 있어 코드 재사용이 가능하고, 중복코드를 제거할 수 있으며, 물려 받은 Property와 method와 더불어 필요한 기능을 추가해 확장할 수도 있다.
3. Polymorphism (다형성)
- 하나의 class나 method가 다양한 방식으로 동작이 가능 한 것을 의미한다.
- Overriding (오버라이딩)
필요에 따라서, 하위 class에서 상속받은 상위 class의 method를 그대로 사용하지 않고 내용을 재정의 하여 사용하는 것.
- Overloading (오버로딩)
같은 method 이름을 사용하지만, 인자의 정보가 다르면 넘겨받은 정보에 맞는 method가 호출되는 것. (다양한 입력에 대해서 처리 할 수 있다.)
객체 지향 언어에서 다형성이란 하나의 클래스나 메서드가 다양한 방식으로 동작이 가능 한 것을 의미합니다. 이러하 다형성에는 오버로딩과 오버라이딩이 존재합니다.
▶ 장점: - 코드의 재활용성이 높다
- 코딩이 절차지향보다 간편하다
- 디버깅이 쉽다
▶ 단점: - 처리속도가 절차지향에 비해 느리다
- 설계에 많은 시간이 소요된다.
▶ 대표적 언어: C++, JAVA, Python
도움을 준 정보들
칼럼:
https://sung-studynote.tistory.com/109
https://brownbears.tistory.com/407
https://lktprogrammer.tistory.com/19
'Programming' 카테고리의 다른 글
프론트엔드 개발을 위한 서비스 구조 (Typescript, React, Styled-components, React-query, MobX, React-intl) (0) | 2023.08.15 |
---|---|
[Programming] Observer Design Pattern (0) | 2020.07.11 |
[Programming] Non blocking / Blocking (0) | 2020.07.09 |
[Programming] Programming_2 (Functional Programming) (0) | 2020.07.06 |
댓글