프로그래밍의 패러다임 변화(방법론)에 대해서 설명하고자 한다.
C++/JAVA등을 이해하는데 전제조건이 된다.
1. 객체 지향 프로그래밍(Object-Oriented Programming)
; 프로그램을 설계하는 방법론.
- 절차적 프로그래밍
; 메소드(method)를 기계, 데이터(Data)를 원료로 생각해서
데이터가 메소드를 통과하면서 순서대로 가공되는 방식이다.
-> Data Flow 라고 생각하면 됨.
-> Data Flow Diagram(DFD)이용
- 객체지향
; 메소드(Method)가 데이터(Data)에 접근해서 처리한다는 개념이다.
즉,
절차적 프로그래밍 : Data가 움직임
객체지향 프로그래밍 : Method가 움직임.
2. 기원
2.1
문제인식
- 프로그래밍의 시작은 절차적 프로그래밍이다.
입력이 순서대로 함수를 통과해서 결과를 출력하는 것이었다.
- 알고리즘이 복잡해질 수록, 스파게티 코드가 발생하는 문제가 생겼다.
=> 떨어지는 가독성, 유지보수도 못 함.
=> 엄청난 라인 수, 중복코드도 문제가 됨.
2.2
구조적(Structured) 프로그래밍[ ;OOP 아니다.] 제안
2.2.1
-> GOTO문의 해로움. 에르허츠 다익스트라의 서신. 1968. 에서 시작.
(Go To Statemente considered hamful)
;GOTO문은 스파게티코드 발생의 주범이었다.
-> 실세계의 문제를 처리(Process)라는 관점으로 모델링하는 방식.
-> 분할과 정복의 원리 적용
-> Data Flow Diagram(DFD)를 그리고, 이를 구조도로 변경.
= 프로그램을 간단한 구문으로 잘게 분해해서, 이들을 결합하는 방식.
- 즉, 계층적으로 작은 단위가 결합해서 큰 단위를 구성하는 방식이다.
- 엄밀하게는 다르지만 Top down방식이라고 말하는 사람도 있다.
- 원자 or 분자 -> 화합물이 되는 것과 비슷한 느낌이다.
2.2.2
문제발생
- 프로그램의 데이터 처리방법만 구조화 되었다.
=> 데이터의 구조화가 안되어서, 네임스페이스 포화문제를 발생시켰다.
; 전역변수가 많아져서, 변수의 이름을 짓기가 힘들어졌다.
2.3
객체 지향 프로그래밍의 등장
; 객체를 만든 뒤, 객체의 조합으로 문제를 해결하자!
-> 실세계를 객체 사이의 인터렉션으로 바라본다.
-> 대규모 시스템을 클래스로 모듈화,캡슐화 하는 방법.
-> 객체 = 변수 + 메소드의 그룹핑
; 쉽게, 자료 + 함수로 묶은 것.
-> 함수를 한곳(클래스)안에 모아두는 것이 시스템을 단순하게 한다.
-> Bottom up으로 이해하는 사람도 있다.(엄밀하게 다름)
-> 레고 블럭을 만드는 느낌이다. 4줄짜리 1칸짜리 이런 것들을 한번 만들어 놓으면 다양한 모양에 재사용 할 수 있으니까.
2.3.1 GUI
- OOP는 컴퓨터 처리능력이 좋아야 했다.
- GUI 등장과 함께 부상하였다.
: 창마다 실행 콘텍스트 보유, 상태에 따라 다른결과, 이벤트 처리
- 이벤트 처리의 비동기적 속성
; 기존에는 코드 전체에 이벤트 처리 코드가 흩어져 있었음.
=> OOP를 도입하여 Event handler, callback 인터페이스를 각각 만듦.
; OOP에서 나오는 인터페이스라는 개념이 중요하다.
=> 이것이 실행되도록 각각 적용하여 사용하면 문제가 해결됨.
=> OOP의 확산
3. 용어정리
3.1 메소드[method](=멤버함수[member function])
3.2
3.3 클래스
출처 및 참고문헌 :
1.slide share. 객체지향의 올바른 이해와 전달. 이세영
https://www.slideshare.net/ssuserf10966/ss-83183793
2. 나무위키. 객체지향프로그래밍
3. 위키피디아. 구조적 프로그래밍
4. 새로 쓴 소프트웨어 공학. 정익사. 최은만. 2017.
5. 생활코딩. 객체지향 프로그래밍. egoing
https://opentutorials.org/course/743/6553
6. 메소드. 위키피디아
'연습 > 개발언어' 카테고리의 다른 글
4. JavaScript 함수 (0) | 2022.01.20 |
---|---|
3.JavaScript 조건문, 배열 (0) | 2022.01.20 |
2. JavaScript 기초 용어 정리 (0) | 2022.01.20 |
1. JavaScript의 전반적인 상식. (0) | 2022.01.20 |
2. JAVA 언어의 배경(작성중) (0) | 2022.01.20 |