— 개발상식
객체 지향 프로그래밍 (Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체
로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 값을 저장 할 변수
와 작업을 수행 할 메소드
를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있다.
객체지향 프로그래밍을 레고에 빗대 표현 할 수 있는데, 객체
가 레고의 조각이 될 것이고 레고의 조각을 조립해서 무언가를 만드는 방식이 객체지향 프로그래밍이라고 할 수 있다.
객체는 또한 레고 조각과도 비슷하게 여러군데에서 재사용 할 수 있는데 이는 부품화
와 재사용성
이라는 객체 지향 프로그래밍의 특징을 보여주기도 한다.
객체지향 프로그래밍을 지원하는 언어로는 C++ , C# , Java , Python , JavaScript , Ruby , Swift
등이 있다. 더 많은 언어를 알고 싶다면 객체 지향 언어를 참고해보자.
객체 지향 프로그래밍은 크게 추상화
, 캡슐화
, 상속
, 다형성
의 네가지 특징을 가진다.
아우디, 니싼, 볼보는 모두 '자동차'에 해당된다. 자동차라는 추상화 집합을 만들어두고 자동차들이 가진 공통적인 특징들을 만들어서 활용한다.
추상화가 왜 필요할까?
속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점이 있고 캡슐화를 통해서 정보은닉
을 활용 할 수도 있다. (접근제어자의 활용)
상속을 하게 된다면 장단점이 존재하는데 이는 다음과 같다.
장점 | 단점 |
---|---|
- 재사용으로 인한 코드가 줄어든다 - 범용적인 사용이 가능하다 - 자료와 메서드의 자유로운 사용 및 추가가 가능하다 | - 상위 클래스의 변경이 어려워진다 - 불필요한 클래스가 증가할 수 있다 - 상속이 잘못 사용될 수 있다 |
객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 된다.
오버라이딩
오버로딩
업무 분담이 편리
하고 대규모 소프트웨어 개발에 적합
하다.유지 보수가 편리
하다.코드 재사용이 용이
하다.처리속도가 상대적으로 느리다
.용량이 커질 수 있다
.설계시 많은 시간과 노력이 필요
하게 될 수 있다.객체 지향 프로그래밍의 반대는 절차 지향 프로그래밍이다?
객체 지향 프로그래밍은 절차 지향 프로그래밍과 장단점이 겹치는 부분이 있기 때문에 그렇게 생각이 들 수 있다. 하지만 절차지향은 순차적으로 실행에 초점이 되어있고 객체지향은 관계/조직에 초점을 맞추고 있다는 초점의 차이일 뿐이다.
절차적 프로그래밍이라고 해서 객체를 다루지 않는 것이 아니고, 객체지향 프로그래밍이라고해서 절차가 없는 것도 아니다.
객체 지향적으로 설계하기 위해 SOLID
라 불리는 다섯 가지 원칙이 있다.