연습/개발언어

1. OOP(객체지향프로그래밍)[작성중]

TimeSave 2022. 1. 20. 21:42

 

프로그래밍의 패러다임 변화(방법론)에 대해서 설명하고자 한다.

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. 나무위키. 객체지향프로그래밍

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

3. 위키피디아. 구조적 프로그래밍

https://ko.wikipedia.org/wiki/%EA%B5%AC%EC%A1%B0%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

4. 새로 쓴 소프트웨어 공학. 정익사. 최은만. 2017.

 

5. 생활코딩. 객체지향 프로그래밍. egoing

https://opentutorials.org/course/743/6553

 

6. 메소드. 위키피디아

https://ko.wikipedia.org/wiki/%EB%A9%94%EC%86%8C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)

 

'연습 > 개발언어' 카테고리의 다른 글

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