"내가 '객체 지향'이라는 용어를 만들었을 때 저는 C++를 생각하지 않았습니다. 가장 큰 아이디어는 '메시징'입니다... 훌륭하고 확장 가능한 시스템을 만드는 열쇠는 훨씬 더 많은 것에 있습니다. 모듈의 내부 속성과 동작이 어떻게 되어야 하는지가 아니라 모듈이 서로 통신하는 방식을 설계합니다."
"이 주제에 대해 오래 전에 '객체'라는 용어를 만든 것을 후회합니다. 왜냐하면 그것이 사람들을 작은 아이디어에 집중하게 하기 때문입니다. 가장 큰 아이디어는 '메시징'입니다."
— 스몰토크 언어 창시자 Alan Kay.
객체 지향 프로그래밍을 배울 때 가장 먼저 보게 되는 것은 자동차에는 문과 바퀴 같은 속성이 있고, 텔레비전에는 켜고 끄는 동작이 있고, 집에는 창문이 있다는 것입니다. 열고 닫습니다. 하지만 실제 시스템은 그런 모습과는 거리가 멀습니다.
HTTPRequest라는 개체는 표시되지만 텔레비전이라는 개체는 표시되지 않습니다. logMessage는 발생하지만 house1Joao는 발생하지 않습니다. 아니면 ResourceManagement, fileSystem 등도 있습니다. 그러면 이제 이러한 "객체"는 어떤 동작을 가져야 합니까?
실제 객체를 표현하는 객체라는 개념은 Alan Kay가 Simula 언어를 사용하기 이전에도 나타났습니다. 언어 창시자인 Ole-Johan Dahl과 Kristen Nygaard는 대기열, 네트워크 트래픽, 제조 프로세스 등과 같은 현실 시뮬레이션에 사용할 언어를 설계하고 있었습니다. 절차적 프로그래밍은 이러한 유형의 문제를 해결하는 데 적합하지 않았습니다.
실제로 중요한 것에 집중하고 구현은 내부에 맡길 수 있는 프로그래밍 형식이 필요한 곳이 바로 여기입니다. 문제 자체보다 코드의 세부 사항에 대해 더 많이 생각하는 강력하고 대규모 시스템을 구축해야 한다고 상상해 보십시오. 코드가 가질 수 있는 기능의 수가 혼란스럽고 모호한 엉킴이 될 만큼 크다는 것은 말할 것도 없습니다.
프로그래밍에서 불필요한 개념을 추상화하는 첫 걸음을 내디뎠습니다.
"하지만 그게 바로 현대적인 OOP입니다!" 라고 소리칠 수도 있습니다. 글쎄요, 그렇습니다. 이 패러다임에 대한 Simula 언어의 구현은 달랐습니다. 재사용 가능하고 유연한 시스템에 중점을 두지 않고 이벤트 및 프로세스 모델링에 중점을 두었습니다.
상속은 간단했습니다. 유연성과 위계보다는 절차를 세분화하고 전문화하는 데 중점을 두었습니다.
캡슐화는 기본이었습니다. private, public, protected와 같은 접근 한정자 개념이 없었습니다.
기본적으로 아이디어는 혼란스러운 코드를 보다 명확한 정의를 통해 패키지로 구성하는 것이었습니다.
얼마 후 Xerox에서 Alan Kay는 메시지에 대한 아이디어를 생각해 냈습니다. 컴퓨터 그래픽과 스몰토크를 만든 제록스에서.
그의 생각은 기본적으로 사물을 생명체로 생각하는 것이 아니라 동물이나 인간이 아닌 세포로 생각하는 것이었습니다. (Alan Kay는 훈련을 받은 생물학자였습니다.)
살아있는 조직은 세포 간의 의사소통 덕분에 완벽하게 기능합니다. 그들은 자신의 기능이 매우 잘 정의되어 있으며 다른 세포로부터 받는 '메시지'에 응답하는 방법을 알고 있습니다.
아이디어는 자신만의 방식으로 메시지에 응답하는 방법을 아는 기능을 가진 개체를 만드는 것이었습니다. 객체의 응답이 어떻게 구현되는지 알 필요도 없고 알 필요도 없습니다. 당신이 알아야 할 유일한 것은 객체가 어떤 종류의 메시지를 이해하는지입니다. (실제로 객체에 '전송'할 수 있는 메시지 집합을 인터페이스라고 합니다.)
예를 들어 "2 + 2"라는 메시지를 보낼 때 합계 개체가 무엇을 반환할 것으로 예상하시나요?
아, 그렇죠. 스몰토크에서는 메시지를 포함한 모든 것이 객체입니다.
네, 알아요. 미친 짓이에요. 다른 개체를 포함하는 개체를 통해 통신하는 개체입니다. 하지만 그게 아이디어입니다.
"그럼 이것이 재사용 및 확장 가능한 시스템을 만드는 데 어떻게 도움이 될까요?"
소프트웨어 시스템은 파일보다는 배선과 더 유사합니다. 이것이 바로 Alan Kay의 차별점입니다.
그에게는 파일 정리가 아니라 전선이 올바른 극에 연결되었는지 걱정해야 합니다.
Alan Kay가 고안한 객체 지향 프로그래밍은 코드를 실제 세계를 모방하는 구조로 구성하는 것이 아니라 메시지를 통해 효율적으로 통신하는 시스템을 만드는 것입니다. 최신 OOP는 Simula의 초기 아이디어에서 발전하여 C++ 및 Java와 같은 언어로 인기를 얻었지만 객체 간 통신이라는 이 접근 방식의 진정한 초점은 희석되는 경우가 많습니다.
Kay의 원래 비전을 이해하면 오늘날 소프트웨어를 설계하고 구축하는 방법을 재고하게 될 수 있습니다. 객체의 내부 구조와 클래스 계층에만 초점을 맞추는 대신, 잘 설계된 모듈 간의 통신이 가져올 수 있는 단순성과 유연성도 중요하게 생각해야 합니다.
OOP의 근본으로 돌아가면 보다 탄력적이고 모듈식이며 확장하기 쉬운 시스템을 개발하는 데 도움이 될 수 있습니다. 결국 Kay가 상기시켜 주듯이 "큰 아이디어"는 사물 자체에 관한 것이 아니라 사물이 소통하는 방식에 관한 것입니다.
출처:
추신: 이 기사는 Moisés Cristiano가 작성하고 ChatGPT가 편집했습니다.
위 내용은 객체 지향 프로그래밍은 당신이 생각하는 것과 다르거나 적어도 의도한 것이 아니었습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!