OOP-객체 지향 프로그래밍
객체(Object)란?
객체란 세상에 존재하는 모든 것 또는 주변에 있는 사물, 생명체 모두 포함되는 개념입니다.
OOP에서의 객체란 데이터와 개념을 묶은 클래스*에서 정의한 것을 메모리에 등재되어 할당된 것을 말합니다.
클래스(Class)란?
특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀입니다.
실제 IDE에서는 구조체의 연장선으로서 세부적으로는 디폴트 접근 지정자*의 차이만 존재합니다.
클래스는 객체가 아니며 하나의 클래스로 여러 객체의 생성이 가능합니다.
접근 지정자란?
구조체(Struct)의 디폴트 접근 지정자는 public
클래스(Class)의 디폴트 접근 지정자는 private
default : 접근 지정자가 없는 형태로 동일한 패키지 안에서만 접근이 가능합니다.
public : 어디서든 접근 허용
private : 클래스 내에서만 접근 허용
protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용
객체 지향 프로그래밍의 특징
객체 지향 프로그래밍에는 4가지 특성이 있습니다.
- 캡슐화(encapsulation)
- 상속성(inheritance)
- 추상화(abstraction)
- 다형성(polymorphism)
캡슐화
캡슐화란 데이터와 코드의 형태를 클래스로 캡슐처럼 감싸는 것을 말합니다.
객체가 어떻게 기능들이 구현되어 있는지를 외부에 감춤으로 정보은닉의 장점을 취할 수 있습니다.
상속성
상속성이란 상위 클래스(부모)의 모든 것을 하위 클래스(자식)가 물려받는 것을 말합니다.
OOP에서는 자식이 부모를 선택함으로 필요한 부분을 물려받아 코드의 중복을 방지하고 개발 시간을 줄이는 효과를 얻을 수 있습니다.
추상화
추상화란 객체의 공통적인 특징은 취하고 차이점은 제외하거나 불필요한 세부 사항을 제거하여 간략화하는 것을 말합니다.
실제로 존재하는 객체들을 프로그램으로 만들기 위하여 공통적인 특성을 파악하고 특성을 제거하는 과정입니다.
예로 for, while, do~while가 '반복'이라는 개념을 취하여 추상화한 것입니다.
다형성
다형성이란 하나의 객체가 여러 가지 타입을 대입할 수 있는 것을 말합니다.
또한 부모 클래스에서 물려받은 가상 함수를 자식 클래스 내에서 오버라이딩하는것 또한 포함되며
예로는 오버라이딩, 오버로딩, 템플릿이 존재합니다.
객체 지향의 장˙단점
객체지향의 장점
- 재사용성
- 생산성 향상
- 유지보수
객체지향의 단점
- 개발 속도가 느림
- 실행 속도가 느림
- 새로운 인력 투입 시 기존 분기들을 파악하는데 시간이 오래 걸림