객체 지향 프로그래밍 (OOP : Object Oriented Programming)

Džeko.Log·2021년 4월 9일
0

✏객체 지향 프로그래밍이란❓


프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
즉 프로그래밍 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것이다. (객체를 주된 관심으로 삼는 프로그래밍 방법론)

객체는 속성(filed)행동(method)으로 이루어진 존재이며, 현실과 가상이나 머리 속의 추상적인 것들 즉 실생활에 쓰이는 모든 것이 객체가 될 수 있다.

✏객체 지향 프로그래밍의 장단점


<장점>

1. 재사용성 : 코드의 재사용을 극대화시킨다. (이미 만들어진 클래스를 상속받거나 객체를 가져다 재사용하거나, 부분 수정을 통해, 소프트웨어를 작성하는 부담을 대폭 줄일 수 있다)
2. 생산성 향상 : 객체는 독립적이어서 이를 재사용함으로 생산성이 증가하게 된다.
3. 유지보수의 우수성 : 기존의 기능을 수정하거나 새로운 기능을 추가하기가 용이하다.(수정해야 할 부분이 클래스 내부에 멤버 변수혹은 메서드로 있기 때문에 해당 부분만 수정하면 됨)
4. 자연적인 모델링 : 생각하는 방식을 그대로 프로그램 언어로 표현할 수 있게 해준다.

<단점>

1. 개발속도가 느림 : 객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소모 된다.
2. 실행속도가 느림
3. 객체가 많으면 용량이 커질 수 있음

✏클래스와 인스턴스(객체)


✔클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것 (객체의 틀 , 설계도)

✔인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로 실제 프로그램에서 사용되는 데이터 (클래스로 생성된 객체(실체) , 설계도에서 동작)

✏객체 지향 프로그래밍의 특징


1. 캡슐화 (Encapsulation)

✔ 속성과 행위들을 관련있는 것끼리 묶는 것
✔ 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것
✔ 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음

2. 추상화(abstraction)

✔ 불필요한 정보는 숨기고 중요한 정보, 객체들의 공통적인 특징(기능, 속성)을 도출
✔ 현재 내가 구현하고자 하는 프로그램에서의 관심사
✔ 기능 단순한 이름으로 정의하는 것에 포커스

3. 상속(Inheritance)

✔ 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것
✔ 부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게하고 기능의 일부분을 변경해야 할 경우 상속받은 자식클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것
코드의 재사용성이 향상됨

4. 다형성(Polymorphism)

✔ 하나의 속성이나 행위가 상황에 따라 다른 의미로 해석될 수 있는 특징
오버라이딩(Overriding) - 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것

0개의 댓글