"객체지향"의 두 판 사이의 차이
7번째 줄: | 7번째 줄: | ||
===등장 배경=== | ===등장 배경=== | ||
초기 프로그래밍 방식은 절차적 프로그램 방식으로 명시된 순서대로 처리한 다음 결과를 도출하는 방식이었다. 하지만 이 방식은 조금만 복잡해지면 순서도로 나타내는 것이 불가능할 정도로 꼬인 '스파게티 코드'를 만들게 되는데 명령어 양이 증가함에 따라 중복코드 대처가 힘들고, 특정 코드가 어디까지 영향을 미치는지 알 수 없기에 유지보수가 굉장히 어려웠다. 이러한 문제를 해결하기 위해 [[에츠허르 데이크스트라]](Dijkstra)는 프로그램을 [[함수]](procedure) 단위로 나누고 [[프로시져]](Procedure)끼리 호출을 하는 [[구조적 프로그래밍]](structured programming) 방식을 제안하면서 이러한 위기를 벗어나게 된다. 하지만 함수는 데이터의 처리 방법을 구조화했을뿐, 데이터 자체는 구조화하지 못했다. 그로 인하여 [[네임스페이스]](Namespace) 포화 문제를 낳게 되며 엉뚱한 데이터가 엉뚱한 함수에 전달돼서 데이터를 오염시키는 문제가 발생하고 그런 가능성 때문에 프로그래머가 한 함수의 작동에 영향을 받는 변수를 조사해야 할 때 모든 변수를 다 조사해야 하는 어려움에 봉착했다. 또한, 만약 프로그램의 크기가 증가한다면 수 많은 변수가 생기며 함수가 접근할 수 있는 데이터의 범위에 명시적인 제한을 걸어야 하는 상황이였다. 이를 극복하기 위한 대안으로 객체 지향 언어의 시초인1960년 [[노위지안 컴퓨터링 센터]]의 [[조한 달]]과 [[크리스틴]]이 발표한 [[시뮬라67]]이다.<ref name="역사 나무"> 〈[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#s-2 객체 지향 프로그래밍]〉, 《나무위키》 </ref><ref name="역사"> DLGNDUD, 〈[http://cedartrees.co.kr/index.php/2020/08/29/oop-story/ 객체지향의 역사와 이해]〉, 《세다트리스 인공지능연구소》, 2020-08-29 </ref><ref name="역사 위키"> 〈[https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D#%EC%97%AD%EC%82%AC 객체 지향 프로그래밍]〉, 《위키백과》 </ref> | 초기 프로그래밍 방식은 절차적 프로그램 방식으로 명시된 순서대로 처리한 다음 결과를 도출하는 방식이었다. 하지만 이 방식은 조금만 복잡해지면 순서도로 나타내는 것이 불가능할 정도로 꼬인 '스파게티 코드'를 만들게 되는데 명령어 양이 증가함에 따라 중복코드 대처가 힘들고, 특정 코드가 어디까지 영향을 미치는지 알 수 없기에 유지보수가 굉장히 어려웠다. 이러한 문제를 해결하기 위해 [[에츠허르 데이크스트라]](Dijkstra)는 프로그램을 [[함수]](procedure) 단위로 나누고 [[프로시져]](Procedure)끼리 호출을 하는 [[구조적 프로그래밍]](structured programming) 방식을 제안하면서 이러한 위기를 벗어나게 된다. 하지만 함수는 데이터의 처리 방법을 구조화했을뿐, 데이터 자체는 구조화하지 못했다. 그로 인하여 [[네임스페이스]](Namespace) 포화 문제를 낳게 되며 엉뚱한 데이터가 엉뚱한 함수에 전달돼서 데이터를 오염시키는 문제가 발생하고 그런 가능성 때문에 프로그래머가 한 함수의 작동에 영향을 받는 변수를 조사해야 할 때 모든 변수를 다 조사해야 하는 어려움에 봉착했다. 또한, 만약 프로그램의 크기가 증가한다면 수 많은 변수가 생기며 함수가 접근할 수 있는 데이터의 범위에 명시적인 제한을 걸어야 하는 상황이였다. 이를 극복하기 위한 대안으로 객체 지향 언어의 시초인1960년 [[노위지안 컴퓨터링 센터]]의 [[조한 달]]과 [[크리스틴]]이 발표한 [[시뮬라67]]이다.<ref name="역사 나무"> 〈[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#s-2 객체 지향 프로그래밍]〉, 《나무위키》 </ref><ref name="역사"> DLGNDUD, 〈[http://cedartrees.co.kr/index.php/2020/08/29/oop-story/ 객체지향의 역사와 이해]〉, 《세다트리스 인공지능연구소》, 2020-08-29 </ref><ref name="역사 위키"> 〈[https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D#%EC%97%AD%EC%82%AC 객체 지향 프로그래밍]〉, 《위키백과》 </ref> | ||
+ | * 네임스페이스: 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.<ref> 〈[https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%A6%84%EA%B3%B5%EA%B0%84 이름공간]〉, 《위키백과》 </ref> | ||
− | + | ===발전=== | |
− | == | ||
2021년 8월 4일 (수) 11:34 판
객체지향(Object Oriented)은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다. 우리가 실생활에서 쓰는 모든 것을 객체(Object)라고 한다. 객체는 클래스(class)라는 틀에서 생겨난 인스턴스(instance)이다. 따라서 객체지향 프로그래밍은 객체와 객체 간의 연결로 되어 있으며 각각의 객체 안에 자료구조와 알고리즘이 들어 있는 것이다.[1]
개요
객체지향은 오늘날 자바(java),C#등의 프로그래밍 언어들을 지배하고 있는 가장 중요한 맥박이라고 할 수 있다. 객체지향 프로그래밍은 크고 견고한 프로그램을 만들기 위한 노력의 산물이라고 한다. 여러 개의 객체 단위로 나누어 작업할 수 있기 때문에 개발자와 협업해 규모가 큰 프로젝트도 무리없이 진행할 수 있으며 유지보수도 뛰어나다는 장점이 있다. 하지만 코딩 난이도가 상승하며 객체에 대한 정확한 이해가 필요하여 설계단계부터 많은 시간이 소요된다.[2][3][4]
역사
등장 배경
초기 프로그래밍 방식은 절차적 프로그램 방식으로 명시된 순서대로 처리한 다음 결과를 도출하는 방식이었다. 하지만 이 방식은 조금만 복잡해지면 순서도로 나타내는 것이 불가능할 정도로 꼬인 '스파게티 코드'를 만들게 되는데 명령어 양이 증가함에 따라 중복코드 대처가 힘들고, 특정 코드가 어디까지 영향을 미치는지 알 수 없기에 유지보수가 굉장히 어려웠다. 이러한 문제를 해결하기 위해 에츠허르 데이크스트라(Dijkstra)는 프로그램을 함수(procedure) 단위로 나누고 프로시져(Procedure)끼리 호출을 하는 구조적 프로그래밍(structured programming) 방식을 제안하면서 이러한 위기를 벗어나게 된다. 하지만 함수는 데이터의 처리 방법을 구조화했을뿐, 데이터 자체는 구조화하지 못했다. 그로 인하여 네임스페이스(Namespace) 포화 문제를 낳게 되며 엉뚱한 데이터가 엉뚱한 함수에 전달돼서 데이터를 오염시키는 문제가 발생하고 그런 가능성 때문에 프로그래머가 한 함수의 작동에 영향을 받는 변수를 조사해야 할 때 모든 변수를 다 조사해야 하는 어려움에 봉착했다. 또한, 만약 프로그램의 크기가 증가한다면 수 많은 변수가 생기며 함수가 접근할 수 있는 데이터의 범위에 명시적인 제한을 걸어야 하는 상황이였다. 이를 극복하기 위한 대안으로 객체 지향 언어의 시초인1960년 노위지안 컴퓨터링 센터의 조한 달과 크리스틴이 발표한 시뮬라67이다.[5][6][7]
- 네임스페이스: 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.[8]
발전
각주
- ↑ 이수호, 〈객체 지향〉, 《인코뎀》, 2020-10-21
- ↑ 〈객체지향 언어의 장점과 단점, 개념, 종류, 절차지향 언어와의 비교〉, 《티스토리》, 2020-10-28
- ↑ 〈객체지향〉, 《생활코딩》, 2014-04-21
- ↑ 재희 jaiyah, 〈객체지향 프로그래밍이란?〉, 《티스토리》
- ↑ 〈객체 지향 프로그래밍〉, 《나무위키》
- ↑ DLGNDUD, 〈객체지향의 역사와 이해〉, 《세다트리스 인공지능연구소》, 2020-08-29
- ↑ 〈객체 지향 프로그래밍〉, 《위키백과》
- ↑ 〈이름공간〉, 《위키백과》
같이 보기