제일 많이 질문 들어오는 것 중에 하나, 바로 객체지향이다.
오늘은 객체지향이란 무엇인지와 객체 지향 프로그래밍의 특징에 대해 알아보려한다.
💡프로그래밍 패러다임
1. 명령형 프로그래밍 : 무엇을 하는지보다 어떻게 할것인지
- 절차지향 프로그래밍
- 객체지향 프로그래밍
2. 선언형 프로그래밍 : 어떻게하는지보단 무엇을 할것인지
- 함수형 프로그래밍
✔ 절차 지향
기능이 중심이 되어, 무엇을 어떤 절차로 할 것인가? 이 점이 중점이 된다.
어떤 기능을 어떤 순서로 처리하는가?즉,
실행에 초점이 맞춰진다.
✔ 객체 지향
객체가 중심이 되어, 누가 어떤 일을 할 것인가가 중점이 된다.
객체를 도출하고 각각의 역할을 정의해 나가는 것.
즉,객체간의 관계/조직에 초점이 맞춰진다.
>> 절차 지향과 객체 지향
- 대형 프로그래밍의 경우 많은 기능이 수반되어 절차 지향보다는 객체 지향에 적합하다
: 각 객체가 하는 역할이 많아도, 많은 역할을 객체로 묶을 수 있기 떄문이다
- 소형 프로그래밍일 경우 작은 기능을 수반하기에 객체 지향보다는 절차 지향에 적합하다
: 적은 기능을 객체별로 나누면, 되려 복잡해질 수 있기 때문이다
객체지향(Object Oriented Programming)의 특징
객체지향은 실제 세계를 모델링하여 소프트웨어를 개발하는 방법으로,
객체지향 프로그래밍에서는 데이터와 절차를 하나의 덩어리로 묶어 생각하게 된다.
마치 컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법이다.
1. 추상화
: 실세계를 객체화하는 것이 아닌 필요 정보만을 중심으로 간소화 하는 것
ex) 지하철 노선도
프로그래밍 언어에서는 객체들의 공통적인 속성과 기능을 중심으로 추상화
2. 캡슐화
: 추상화를 통한 객체를 정의 후, 객체에 필요한 데이터나 기능(메소드)을 책임이 있는 객체에 그룹화시켜주는 것
3. 상속
: 상위 클래스의 기능을 하위 클래스가 사용할 수 있는 개념
코드의 재사용성을 높이기 위해 상속이 필요하다
중복되는 기능이나 데이터는 상위 클래스로 분리하여 상속을 이용해 재사용한다
4. 다형성
객체간 관계를 디자인하는 프로그래밍인 객체 지향 프로그래밍에서, 객체간 관계를 유연하게 해주는 특징
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
오늘은 과일을 먹었다 라는 명제에서 과일이 토마토가 될수도 있고, 바나나가 될수도 있다.
이런 특징을 다형성이라고 한다. 인터페이스가 이런 다형성을 구현하게 돕는 대표 예시이다.
즉, 오버라이딩(Overriding), 오버로딩(Overloading)이 가능하다는 얘기다.
오버라이딩 : 부모클래스의 메소드와 같은 이름, 매개변수를 재정의 하는 것
오버로딩 : 같은 이름의 함수를 여러개 정의해, 매개변수의 타입과 개수를 다르게 하는 것
위의 특징들을 보면 getter,setter를 사용하는 이유에 대해 의아할 수 있다.
이는 getter, setter 를 사용하면 메소드를 통해 접근하기 때문에, 메소드 내에 매개변수같이 올바르지 않은 입력에 대해 사전 처리가 가능하기 때문이다,
뭐가 그렇게 좋길래 객체 지향 객체 지향 하는것일까
객체 지향 프로그래밍의 장단점
장점
1️⃣소프트웨어의 생산성 향상
객체 지향 프로그래밍은 다형성, 객체, 캡슐화 등 소프트웨어의 재사용을 지향한다.
기존에 생성된 클래스를 상속받거나 객체를 재사용하거나, 부분 수정을 통해, SW 작성 부담을 줄일 수 있다.
- 신뢰성 있는 SW의 손쉬운 작성(개발자가 만든 데이터를 사용해 신뢰성있다)
- 코드의 재사용성(상속, 캡슐화, 다형성으로 인한 재사용성)
- 업그레이드가 쉽다
- 디버깅이 쉽다
2️⃣ 실세계에 대한 쉬운 모델링
- 모든 것을 객체들의 상호작용으로 생각
3️⃣ 보안성 향상
객체 지향적 프로그래밍의 캡슐화 특징으로 실제로 구현되는 부분을 외부에 드러나지 않도록 하여
정보를 은닉할 수 있다.
- 보안성이 높다
(캡슐화, 데이터 은닉, 다형성으로 인해 필요한 정보를 재정의하거나 getter, setter를 이용하기 때문에 보안성이 높다)
단점
1️⃣ 느린 실행 속도
캡슐화와 격리 구조로 인해 절차 지향 프로그래밍과 비교하면 실행 속도가 느리다.
객체지향에서는 모든 것을 객체로 생각하기에 추가적인 포인터 크기의 메모리와 연산에 대한 비용이 들어간다.
- 절차지향 프로그래밍에 비해 느린 실행 속도
- 필요한 메모리양의 증가
2️⃣ 큰 프로그램 용량
객체 단위로 프로그램을 많이 만들다보면, 불필요한 정보들의 삽입으로 프로그램 용량 증가로 이어질 수 있다.
3️⃣ 설계에 많은 시간 소요
클래스별로, 객체별로 설계하고, 상속 등의 구조 또한 설계해야하기 때문에, 절차지향언어에 비해 설계에 드는 시간이 많다
요약
1) 객체지향언어는 상태와 행위로 이뤄진 객체라는 기본단위로 나누고, 이 객체들간의 상호작용을 통해 프로그램을 설계하고 개발하는 것.
2) 객체 지향은 캡슐화, 추상화, 상속성, 다형성 4가지 특징을 가진다.
3) 객체지향 프로그래밍은 재사용이 용이하고, 생산성이 높아, 유지보수가 용이한 장점이 있다.
그러나 설계 시간이 오래걸리고, 실행속도가 느리다.
다음 글에서는 객체지향 프로그래밍의 5가지 설계 원칙에 대해 알아보겠다.
참고 자료 :
https://youngjinmo.github.io/2021/04/features-of-oop/
https://brownbears.tistory.com/407
http://www.incodom.kr/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5
https://universitytomorrow.com/15
https://jeong-pro.tistory.com/95
'I LEARNED > 자료구조' 카테고리의 다른 글
[자료 구조] 교착상태 (0) | 2023.01.24 |
---|---|
[자료 구조] TDD? (0) | 2023.01.20 |
[자료구조] 객체 지향적 설계 원칙 (0) | 2023.01.19 |
[자료 구조] 정규화(Normalization) (0) | 2022.08.18 |
[자료 구조] 느슨한결합?강한결합? (0) | 2022.08.05 |
댓글