객체지향 디자인 컴퓨터가 발명된 순간부터 시작되었습니다. 프로그래밍이 있었고 프로그래밍 접근 방식이 등장했습니다. 프로그래밍은 기본적으로 컴퓨터에 특정 명령을 내리는 것입니다.
컴퓨팅 시대 초기에는 프로그래밍이 일반적으로 기계어 프로그래밍으로 제한되었습니다. 기계어는 특정 기계나 프로세서에 특정한 명령어 세트를 의미하며 0과 1의 형태로 되어 있습니다. 이는 비트 시퀀스입니다(0100110…). 하지만 기계어로 프로그램을 작성하거나 소프트웨어를 개발하는 것은 꽤 어렵습니다.
비트 시퀀스를 사용하여 오늘날의 시나리오에서 사용되는 소프트웨어를 개발하는 것은 실제로 불가능합니다. 이것이 프로그래머들이 차세대 프로그래밍 언어로 옮겨가서 쉽게 이해할 수 있을 만큼 영어에 가까운 어셈블리 언어를 개발하는 주된 이유였습니다. 이러한 어셈블리 언어는 마이크로프로세서에 사용되었습니다. 마이크로프로세서의 발명으로 어셈블리 언어가 번성해 업계를 지배했지만, 그것만으로는 충분하지 않았습니다. 다시, 프로그래머들은 새로운 것, 즉 구조화되고 절차적인 프로그래밍을 생각해 냈습니다.

인터넷을 사용하여
구조화된 프로그래밍 –
구조적 프로그래밍 접근 방식의 기본 원칙은 프로그램을 기능과 모듈로 나누는 것입니다. 모듈과 기능을 사용하면 프로그램을 더 이해하기 쉽고 읽기 쉽게 만듭니다. 이는 더 깔끔한 코드를 작성하고 기능과 모듈에 대한 제어를 유지하는 데 도움이 됩니다. 이 접근 방식은 데이터보다는 기능에 중요성을 부여합니다. 이는 대규모 소프트웨어 애플리케이션 개발에 중점을 두고 있습니다. 예를 들어 C는 최신 운영 체제 개발에 사용되었습니다. 프로그래밍 언어인 PASCAL(Niklaus Wirth가 도입)과 C(Dennis Ritchie가 도입)는 이 접근 방식을 따릅니다.
절차적 프로그래밍 접근 방식 –
이 접근 방식은 하향식 접근 방식이라고도 합니다. 이 접근 방식에서는 프로그램이 특정 작업을 수행하는 기능으로 구분됩니다. 이 접근 방식은 주로 중간 규모 애플리케이션에 사용됩니다. 데이터는 전역적이며 모든 기능이 전역 데이터에 액세스할 수 있습니다. 절차적 프로그래밍 접근 방식의 기본적인 단점은 데이터가 전역적이고 모든 기능에서 액세스할 수 있기 때문에 데이터가 보호되지 않는다는 것입니다. 프로그램 제어 흐름은 함수 호출 및 goto 문을 통해 달성됩니다. 프로그래밍 언어: FORTRAN(IBM에서 개발) 및 COBOL(Grace Murray Hopper 박사가 개발)은 이 접근 방식을 따릅니다.
이러한 프로그래밍 구성은 1970년대 후반과 1980년대에 개발되었습니다. 이러한 언어에는 잘 구조화된 프로그램, 소프트웨어 등의 기준을 충족했지만 여전히 몇 가지 문제가 있었습니다. 당시 요구 사항만큼 구조화되지 않았습니다. 지나치게 일반화된 것으로 보이며 실시간 애플리케이션과 상관관계가 없습니다.
이러한 문제를 해결하기 위해 객체지향 접근방식인 OOP가 솔루션으로 개발되었습니다.

객체 지향 프로그래밍(OOP) 접근 방식 –
OOP 개념은 기본적으로 실제 응용 프로그램과 그리 가깝지 않은 위 프로그래밍 방법론의 단점을 극복하기 위해 설계되었습니다. 수요가 증가했지만 여전히 기존 방식이 사용되었습니다. 이 새로운 접근 방식은 프로그래밍 방법론 분야에 혁명을 가져왔습니다.
객체지향 프로그래밍(OOP)은 특정 클래스와 실시간 객체의 도움으로 프로그램을 작성할 수 있게 해주는 것에 지나지 않습니다. 이러한 클래스와 개체의 상태와 동작이 실제 개체와 거의 동일하기 때문에 이 접근 방식은 실제 세계 및 해당 응용 프로그램과 매우 유사하다고 말할 수 있습니다.
아래에 나와 있는 OOP의 일반적인 개념에 대해 더 자세히 살펴보겠습니다.
클래스와 객체란 무엇입니까?
이것이 OOP의 기본 개념입니다. C에서 사용되는 구조의 확장된 개념입니다. 추상적이고 사용자 정의된 데이터 유형입니다. 여러 변수와 함수로 구성됩니다. 클래스의 주요 목적은 데이터와 정보를 저장하는 것입니다. 클래스의 멤버는 클래스의 동작을 정의합니다. 클래스는 객체의 청사진이지만 클래스의 구현이 객체라고 말할 수도 있습니다. 클래스는 세상에 보이지 않지만 객체는 존재합니다.
CPP
Class car> {> >int> car_id;> >char> colour[4];> >float> engine_no;> >double> distance;> > >void> distance_travelled();> >float> petrol_used();> >char> music_player();> >void> display();> }> |
>
>
여기서 car 클래스에는 car_id, color,engine_no 및 distance 속성이 있습니다. 이는 공개(클래스 외부의 모든 사람에게 표시), 보호 및 비공개(아무에게도 표시되지 않음)로 선언될 수 있는 동일한 사양을 가진 실제 자동차와 유사합니다. 또한 distance_travelled(), petrol_used(), music_player() 및 display()와 같은 몇 가지 메소드가 있습니다. 아래 코드에서 자동차는 클래스이고 c1은 자동차의 객체입니다.
해시맵 자바
CPP
#include> using> namespace> std;> > class> car {> public>:> >int> car_id;> >double> distance;> > >void> distance_travelled();> > >void> display(>int> a,>int> b)> >{> >cout <<>'car id is= '> << a <<>'
distance travelled = '> << b + 5;> >}> };> > int> main()> {> >car c1;>// Declare c1 of type car> >c1.car_id = 321;> >c1.distance = 12;> >c1.display(321, 12);> > >return> 0;> }> |
>
>
데이터 추상화 –
추상화란 해당 기능에 대한 배경 세부정보나 설명을 포함하지 않고 중요하고 특별한 기능을 표현하는 행위를 말합니다. 데이터 추상화는 데이터베이스 설계를 단순화합니다.

- 신체 수준:
이는 종종 사용자에게 숨겨져 있는 기록이 저장되는 방법을 설명합니다. 이는 저장 블록이라는 문구로 설명할 수 있습니다.
논리적 수준:
데이터베이스에 저장된 데이터와 데이터 간의 관계를 설명합니다. 프로그래머는 일반적으로 데이터 간의 관계를 유지하는 데 필요한 기능을 인식하고 있으므로 이 수준에서 작업합니다.
보기 수준:
응용프로그램은 보안을 위해 데이터 유형 및 정보의 세부사항을 숨깁니다. 이 수준은 일반적으로 GUI의 도움으로 구현되며 사용자를 위한 세부 정보가 표시됩니다.
캡슐화 –
캡슐화는 객체지향 프로그래밍(OOP)의 기본 개념 중 하나입니다. 이는 데이터 래핑 아이디어와 하나의 단위(예: Java의 클래스) 내에서 데이터에 대해 작업하는 메소드를 설명합니다. 이 개념은 객체의 내부 상태 표현을 외부에서 숨기는 데 자주 사용됩니다.
상속 –
상속은 한 클래스가 상위 클래스라고 하는 다른 클래스의 기능이나 속성을 상속하는 능력입니다. 클래스를 작성할 때 우리는 다른 클래스로부터 속성을 상속받습니다. 따라서 클래스를 생성할 때 모든 속성과 함수를 반복해서 작성할 필요가 없습니다. 이러한 속성과 함수는 해당 클래스를 소유한 다른 클래스에서 상속될 수 있기 때문입니다. 상속을 통해 사용자는 가능할 때마다 코드를 재사용하고 중복성을 줄일 수 있습니다.

자바
import> java.io.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >System.out.println(>'GfG!'>);> > >Dog dog =>new> Dog();> >dog.name =>'Bull dog'>;> >dog.color =>'Brown'>;> >dog.bark();> >dog.run();> > >Cat cat =>new> Cat();> >cat.name =>'Rag doll'>;> >cat.pattern =>'White and slight brownish'>;> >cat.meow();> >cat.run();> > >Animal animal =>new> Animal();> > >animal.name =>'My favourite pets'>;> > >animal.run();> >}> }> > class> Animal {> >String name;> >public> void> run()> >{> > >System.out.println(>'Animal is running!'>);> >}> }> > class> Dog>extends> Animal {> > /// the class dog is the child and animal is the parent> > >String color;> >public> void> bark()> >{> >System.out.println(name +>' Wooh ! Wooh !'> >+>'I am of colour '> + color);> >}> }> > class> Cat>extends> Animal {> > >String pattern;> > >public> void> meow()> >{> >System.out.println(name +>' Meow ! Meow !'> >+>'I am of colour '> + pattern);> >}> }> |
>
컴퓨터 네트워크
>
C++
#include> #include> using> namespace> std;> > class> Animal {> public>:> >string name;> >void> run(){> >cout<<>'Animal is running!'>< } }; class Dog : public Animal { /// the class dog is the child and animal is the parent public: string color; void bark(){ cout<' Wooh ! Wooh !' <<'I am of colour '< } }; class Cat : public Animal { public: string pattern; void meow(){ cout<' Meow ! Meow !'<<'I am of colour '< } }; int main(){ cout<<'GFG'< Dog dog; dog.name = 'Bull dog'; dog.color = 'Brown'; dog.bark(); dog.run(); Cat cat; cat.name = 'Rag doll'; cat.pattern = 'White and slight brownish'; cat.meow(); cat.run(); Animal animal; animal.name = 'My favourite pets'; animal.run(); return 0; //code contributed by Sanket Gode. }> |
>
>산출
javac가 인식되지 않습니다
GfG! Bull dog Wooh ! Wooh !I am of colour Brown Animal is running! Rag doll Meow ! Meow !I am of colour White and slight brownish Animal is running! Animal is running!>
다형성 –
다형성은 데이터가 두 가지 이상의 형식으로 처리되는 능력입니다. 동일한 작업을 다양한 방식으로 수행할 수 있습니다. 이는 메서드 오버로딩과 메서드 재정의로 구성됩니다. 즉, 메서드를 한 번 작성하고 동일한 메서드 이름을 사용하여 여러 작업을 수행합니다.

CPP
#include> using> namespace> std;> > void> output(>float>);> void> output(>int>);> void> output(>int>,>float>);> > int> main()> {> >cout <<>'
GfG!
'>;> >int> a = 23;> >float> b = 2.3;> > >output(a);> >output(b);> >output(a, b);> > >return> 0;> }> > void> output(>int> var)> {>// same function name but different task> >cout <<>'Integer number: '> << var << endl;> }> > void> output(>float> var)> {>// same function name but different task> >cout <<>'Float number: '> << var << endl;> }> > void> output(>int> var1,>float> var2)> {>// same function name but different task> >cout <<>'Integer number: '> << var1;> >cout <<>' and float number:'> << var2;> }> |
>
>
OOP에 대해 알아야 할 몇 가지 중요한 사항:
- OOP는 데이터를 중요한 요소로 취급합니다.
- 절차보다는 데이터에 중점을 둡니다.
- 문제를 더 간단한 모듈로 분해합니다.
- 데이터가 전체 시스템에서 자유롭게 흐르는 것을 허용하지 않습니다(예: 국부적인 제어 흐름).
- 데이터는 외부 기능으로부터 보호됩니다.
OOP의 장점 -
- 현실 세계를 매우 잘 모델링합니다.
- OOP를 사용하면 프로그램을 이해하고 유지 관리하기 쉽습니다.
- OOP는 코드 재사용성을 제공합니다. 이미 생성된 클래스는 다시 작성하지 않고도 재사용할 수 있습니다.
- OOP는 클래스의 병렬 개발이 가능한 프로그램의 빠른 개발을 촉진합니다.
- OOP를 사용하면 프로그램을 테스트, 관리 및 디버그하기가 더 쉽습니다.
OOP의 단점 -
- OOP를 사용하면 클래스가 지나치게 일반화되는 경향이 있습니다.
- 계층 간의 관계는 때때로 피상적이 된다.
- OOP 디자인은 까다롭고 적절한 지식이 필요합니다. 또한 OOP 프로그래밍을 위해서는 적절한 계획과 설계가 필요합니다.
- OOP로 프로그래밍을 하기 위해서는 프로그래머가 디자인, 프로그래밍, 객체와 클래스에 대한 사고 등 적절한 기술이 필요합니다.