웹 프론트엔드 JS 튜토리얼 JavaScript는 진정한 OOP 언어입니까?

JavaScript는 진정한 OOP 언어입니까?

Nov 30, 2017 am 10:22 AM
javascript js oop

JavaScript객체 지향 여전히 객체 지향이 아니지만 일부 사람들은 JavaScript가 유형도 없고, 불합리한 구조도 있고, 약간의 이상함도 있고, 객체 지원도 좋지 않으며, 확실히 OOP 언어가 아닌 완전한 엉망이라고 말합니다. JavaScript는 정말 oop 언어가 아닌가? 살펴보자!

알아요, 이 주제는 너무 많이 논의됐어요. 그러나 그것은 계속해서 언급됩니다. Java나 C# 또는 기타 OOP 언어 개발자가 JavaScript를 접할 때마다 개발자들은 많은 불평을 합니다. 그들은 JavaScript로 작업하는 것이 완전히 엉망이라고 말합니다. 유형도 없고, 구조도 좋지 않으며, 약간 이상하고, 객체 지원도 좋지 않으며, 확실히 OOP 언어가 아닙니다.

이러한 불만 사항 중 일부는 받아들일 수 있지만 다른 불만 사항은 JavaScript에 유형이 없으므로 OOP 언어가 아니라고 말하는 등 편견이 있습니다. 후자에 관해서는 성급한 결론을 내리기 전에 스스로에게 질문해야 합니다. 무엇이 프로그래밍 언어를 객체 지향 프로그래밍 언어로 만드는가?

OOP란 무엇인가요?

OOP 패턴에 대한 공식적인 표준 사양은 없습니다. OOP가 무엇인지, 아닌지를 정의하는 기술 문서는 없습니다. OOP 정의는 주로 Kristen Nygaard, Alan Kays, William Cook 등과 같은 초기 연구자들이 발표한 논문의 상식을 기반으로 합니다. 객체 지향은 두 가지 요구 사항을 기반으로 하기 때문에 OOP를 정의하려는 시도와 프로그래밍 언어를 분류하기 위해 널리 받아들여지는 정의가 있었습니다.

객체를 통해 문제를 모델링하는 능력.

모듈화 및 코드 재사용을 허용하는 몇 가지 원칙을 지원합니다.

첫 번째 요구 사항을 충족하려면 언어는 개발자가 객체를 사용하여 현실을 설명하고 객체 간의 관계를 다음과 같이 정의할 수 있도록 해야 합니다.

연관: 객체가 다른 독립 객체를 참조하는 기능입니다.

집계: 하나 이상의 독립 개체를 포함하는 개체의 능력입니다.

구성: 하나 이상의 종속 개체를 포함하는 개체의 기능입니다.

일반적으로 언어가 다음 원칙을 지원하면 두 번째 요구 사항이 충족됩니다.

캡슐화: 데이터 및 조작 코드의 단일 엔터티에 집중하고 내부 세부 정보를 숨기는 기능입니다.

상속: 개체가 하나 이상의 다른 개체에서 일부 또는 모든 요소를 ​​얻는 메커니즘입니다.

다형성: 데이터 유형 또는 구조에 따라 객체를 다르게 처리하는 능력입니다.

이러한 요구 사항을 충족하는 언어는 일반적으로 객체 지향 언어로 분류됩니다.

JavaScript 및 OOP

이제 우리는 OOP 언어가 어떤 모습인지 알았습니다. 그렇다면 JavaScript가 OOP 언어라는 것을 증명할 수 있을까요? 시도해 봅시다.

우리는 연관, 집계 및 구성을 지원하는 JavaScript 개체의 능력이 강력하지 않다는 것을 알고 있습니다. 다음 코드를 살펴보세요.

var johnSmith = {
 firstName: "John",
 lastName: "Smith",
 address: { //Composition
 street: "123 Duncannon Street",
 city: "London",
 country: "United Kingdom"
 }
};var nickSmith = {
 firstName: "Nick",
 lastName: "Smith",
 address: { //Composition
 street: "321 Oxford Street",
 city: "London",
 country: "United Kingdom"
 }
};
johnSmith.parent = nickSmith; //Associationvar company = {
 name: "ACME Inc.",
 employees: []
};//Aggregationcompany.employees.push(johnSmith);
company.employees.push(nickSmith);
로그인 후 복사

위 코드에서 조합(주소 속성)의 예, 연결(부모 속성)의 예, 집계(직원 속성)의 예를 찾을 수 있습니다.

캡슐화의 경우 JavaScript 개체는 데이터와 기능을 지원하는 엔터티이지만 내부 세부 정보를 숨길 수 있는 높은 수준의 기본 지원은 없습니다. JavaScript 객체는 개인 정보 보호에 관심이 없습니다. 조심하지 않으면 모든 속성 및 메서드에 공개적으로 액세스할 수 있습니다. 그러나 객체의 내부 상태를 정의하고 외부 액세스로부터 객체를 보호하기 위해 여러 기술을 적용할 수 있습니다. getter 및 setter를 사용하여 클로저를 악용합니다.

JavaScript는 소위 프로토타입 상속을 통해 기본 수준에서 상속을 지원합니다. 일부 개발자는 다소 단순하다고 생각하지만 JavaScript의 상속 메커니즘은 완전히 유효하며 대부분의 인식된 OOP 언어와 동일한 결과를 얻을 수 있습니다. 여러분이 어떻게 생각하든 JavaScript에는 "객체가 하나 이상의 다른 객체로부터 일부 또는 모든 기능을 얻는" 메커니즘이 있으며 이것이 바로 상속입니다.

다형성에 대한 도전은 많은 사람들이 이 개념을 데이터 유형과 연관시키기 때문에 더 어려운 것 같습니다. 실제로 다형성은 프로그래밍 언어의 여러 측면에 영향을 미치며 OOP 언어에만 관련된 것이 아닙니다. 일반적으로 여기에는 제네릭, 오버로딩 및 구조적 하위 유형과 같은 항목이 포함됩니다. 이 모든 것이 "단순"하고 약한 유형의 언어인 JavaScript에 비해 압도적으로 보입니다. 그러나 사실은 그렇지 않습니다. JavaScript에는 다양한 유형의 다형성을 구현할 수 있는 여러 가지 방법이 있으며 아마도 깨닫지도 못한 채 여러 번 수행했을 것입니다.

클래스가 없는 OOP

“그래, 하지만 다시 말하지만 JavaScript에는 클래스가 없습니다.”

많은 개발자는 JavaScript를 실제 객체로 간주하지 않고 JavaScript에 클래스 개념이 부족하다고 믿습니다. OOP 원칙 준수를 강요하지 않기 때문에 지향적인 언어입니다.

그러나 비공식 정의에서는 클래스에 대한 명시적인 언급이 없음을 알 수 있습니다. 객체에는 속성과 원리가 필요하다는 것은 사실입니다. 그러나 클래스는 실제로 요구 사항이 아니며 때로는 공통 속성을 가진 개체 집합을 추상화하는 편리한 방법일 뿐입니다. 따라서 언어를 지원하는 개체에 클래스가 없더라도 JavaScript와 같은 개체 지향 언어일 수 있습니다.

게다가 OOP 원칙의 목적도 지원되도록 설계되었습니다. 언어로 프로그래밍하기 위해 OOP 원칙이 필수는 아닙니다. 개발자는 객체 지향 코드를 생성할 수 있는 구문을 사용하거나 사용하지 않을 수도 있습니다. 많은 사람들은 개발자가 OOP 원칙을 위반하는 코드를 작성할 수 있기 때문에 JavaScript를 비판합니다. 그러나 이는 언어 제한이 아닌 프로그래머의 선택일 뿐입니다. 이는 C++와 같은 다른 프로그래밍 언어에서도 발생합니다.

따라서 우리는 추상 클래스가 부족하고 개발자에게 OOP 원칙을 지원하는 기능을 자유롭게 사용하거나 사용하지 않도록 허용하는 것이 JavaScript를 OOP 언어로 식별하는 데 실질적인 장애물이 아니라는 결론을 내릴 수 있습니다.


이 기사를 읽고 나면 새로운 이해와 이득을 얻게 되며 반 친구들을 도와야 합니다!


관련 권장 사항:

JavaScript 학습 노트의 기본 구문

JavaScript를 사용하여 의사 클래스 스타일을 수정하는 방법

JavaScript 사용에 대한 자세한 설명 평가

위 내용은 JavaScript는 진정한 OOP 언어입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 Dec 17, 2023 pm 02:54 PM

WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

주식 분석을 위한 필수 도구: PHP 및 JS를 사용하여 캔들 차트를 그리는 단계를 알아보세요. 주식 분석을 위한 필수 도구: PHP 및 JS를 사용하여 캔들 차트를 그리는 단계를 알아보세요. Dec 17, 2023 pm 06:55 PM

주식 분석을 위한 필수 도구: PHP 및 JS에서 캔들 차트를 그리는 단계를 배우십시오. 인터넷과 기술의 급속한 발전으로 주식 거래는 많은 투자자에게 중요한 방법 중 하나가 되었습니다. 주식분석은 투자자의 의사결정에 있어 중요한 부분이며 캔들차트는 기술적 분석에 널리 사용됩니다. PHP와 JS를 사용하여 캔들 차트를 그리는 방법을 배우면 투자자가 더 나은 결정을 내리는 데 도움이 되는 보다 직관적인 정보를 얻을 수 있습니다. 캔들스틱 차트는 주가를 캔들스틱 형태로 표시하는 기술 차트입니다. 주가를 보여주네요

권장 사항: 우수한 JS 오픈 소스 얼굴 감지 및 인식 프로젝트 권장 사항: 우수한 JS 오픈 소스 얼굴 감지 및 인식 프로젝트 Apr 03, 2024 am 11:55 AM

얼굴 검출 및 인식 기술은 이미 상대적으로 성숙하고 널리 사용되는 기술입니다. 현재 가장 널리 사용되는 인터넷 응용 언어는 JS입니다. 웹 프런트엔드에서 얼굴 감지 및 인식을 구현하는 것은 백엔드 얼굴 인식에 비해 장점과 단점이 있습니다. 장점에는 네트워크 상호 작용 및 실시간 인식이 줄어 사용자 대기 시간이 크게 단축되고 사용자 경험이 향상된다는 단점이 있습니다. 모델 크기에 따라 제한되고 정확도도 제한됩니다. js를 사용하여 웹에서 얼굴 인식을 구현하는 방법은 무엇입니까? 웹에서 얼굴 인식을 구현하려면 JavaScript, HTML, CSS, WebRTC 등 관련 프로그래밍 언어 및 기술에 익숙해야 합니다. 동시에 관련 컴퓨터 비전 및 인공지능 기술도 마스터해야 합니다. 웹 측면의 디자인으로 인해 주목할 가치가 있습니다.

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 Dec 17, 2023 pm 05:30 PM

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

PHP 및 JS 개발 팁: 주식 캔들 차트 그리기 방법 익히기 PHP 및 JS 개발 팁: 주식 캔들 차트 그리기 방법 익히기 Dec 18, 2023 pm 03:39 PM

인터넷 금융의 급속한 발전으로 인해 주식 투자는 점점 더 많은 사람들의 선택이 되었습니다. 주식 거래에서 캔들 차트는 주가의 변화 추세를 보여주고 투자자가 보다 정확한 결정을 내리는 데 도움이 되는 일반적으로 사용되는 기술적 분석 방법입니다. 이 기사에서는 PHP와 JS의 개발 기술을 소개하고 독자가 주식 캔들 차트를 그리는 방법을 이해하도록 유도하며 구체적인 코드 예제를 제공합니다. 1. 주식 캔들 차트의 이해 주식 캔들 차트를 그리는 방법을 소개하기 전에 먼저 캔들 차트가 무엇인지부터 이해해야 합니다. 캔들스틱 차트는 일본인이 개발했습니다.

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 Dec 17, 2023 pm 05:13 PM

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 Jan 05, 2024 pm 06:08 PM

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

js와 vue의 관계 js와 vue의 관계 Mar 11, 2024 pm 05:21 PM

js와 vue의 관계: 1. 웹 개발의 초석인 JS 2. 프론트엔드 프레임워크로서의 Vue.js의 등장 3. JS와 Vue의 상호 보완적인 관계 4. JS와 Vue의 실제 적용 Vue.

See all articles