- 객체지향 프로그래밍은 우리 주변에서 매우 쉽게 보이는 프로그래밍 방식이기도 하고 대규모 프로젝트 단위에서 자주 쓰이기 때문에, 필수적인 요소가 된지 이미 오래이다.
그렇다면, 객체지향이란 무엇이고, 왜 나왔으며, 어떻게 만들어야 하는 것인가?
알아가보도록 하자.
객체지향이란?
- 객체란, 존재하는 모든 것을 의미한다. 흔히 객체(object)란 말을 들으면, 질량을 가진 어떤 것을 떠올리곤 하는 데, 실상은 존재하는 모드것을 칭한다.
- 특히, 프로그래밍의 관점에서 본다면 데이터 + 기능 으로 이루어진다. 즉, 변수와 메소드로 이루어진 것이 객체란 것이다.
- 이렇게 객체로 묶어진 단위의 프로그래밍을 한다면, 데이터 분산의 위험을 예방하고, 데이터와 기능을 하나로 묶어줄수 있기에 직관적으로 받아들이기 쉽다. (처음 접해본다면 생소할수도 있지만, 뒤에 추가설명이 나온다)
- 사실, 객체와 클래스는 다른것이다. 위의 설명을 보면, 데이터와 메소드가 정의된 클래스가 객체란 말이 아닌가? 라고 생각할수도 있다. 하지만, 차이점이 엄연하다.
클래스 : 사용자 정의 데이터 형. 쉽게 말해, 속성과 행위를 정의 해 둔것 -> 추상적, 개념적으로 존재(설계도라고 많이들 비교하곤 한다.)
객체 : 클래스의 인스턴스이다. 메모리에 할당된 실존하는 것이다. (설계도에 따라서 만들어진 것)
정리: 객체지향이란 데이터와 메소드로 이루어진 클래스를 통해서 메모리에 할당하여 프로그래밍을 하는 방식을 말하는구나!!
Why OOP?
객체지향 이전의 패러다임
순차적 -> 절차적 -> 객체지향
순차적 - 순차적으로 흘러가기에 직관적이지만, 구조가 없기에, 코드가 뒤죽박죽이 되게 된다. (goto의 남용) ->
a -> b -> c의 흐름일때, c에서 b로 가고 싶은 과정에서 goto가 사용된다. 이런 방식이기에 goto 자꾸 쓰이게 되는데 이로 인해, 직관적이란 것인 장점을 잃게 되었다
절차적 - 절차란, 함수를 의미하는데, 실행이 주가 된다. 재사용이 가능한 곳을 함수단위로 나눈 프로그래밍이다. goto가 남발 할때와 달리, 반복되는 곳을 procedure로 쪼개고, procedure안의 반복문을 for로 반복 시켜준다. but, 추상적인 행위의 단위이기 때문에 물리적인 데이터 가공이 어렵다. 코드가 복잡해질때 순차도가 복잡해진다. (즉, 메소드 중심의 개발)
객그래서 나왔다, 객체지향 프로그래밍
가능한 모든 물리적(데이터), 논리적(메소드) 요소들을 객체로 만든다. 변수와 메소드를 그룹핑한 '객체'는 다른 객체로 부터 높은 수준의 독립성을 갖는다. 개발자들은 초반에 객체를 설계할 때만 시간을 쓰고, 시간이 지날수록 중복 코드를 최대로 줄일 수 있으며 객체와 객체간에 독립성이 확립되므로 유지보수에 도움이된다.
절차 vs 객체
절차적 프로그래밍의 반대가 객체지향이다?
접근방식의 차이이다. 데이터 중심으로 함수를 만드는것 vs 함수와 데이터를 하나의 객체로 묶는것
예) 절차
손님이 웨이터에게 음식을 주문 -> 웨이터 주문을 주방장에게 전달 -> 요리사 주문 읽고 요리
객체
웨이터 : (주문) + (주문 받기, 주문 전달), 요리사 : (주문)+(주문 인식+요리)
장점 vs 단점
장점
1. 모듈화, 캡슐화로 인해 유지보수에 용이하다.
2. 객체지향적이기 때문에 현실 세계와 유사성에 의해 코드를 이해하기 쉽게 만든다.
3. 객체는 그 자체가 하나의 프로그램이기 때문에 다른 프로그램에서 재사용이 가능하다.
단점
1. 대부분의 객체 지향 프로그램은 속도가 상대적으로 느려지고 많은 양의 메모리를 사용하는 경향이 있다.
2. 현실 세계와 유사성에 의해 코드를 이해하기 쉽게 만드는 만큰 설계 과정에 시간이 많이 투자된다..
'Programming > Dev Architecture' 카테고리의 다른 글
싱글턴 패턴 (제네릭 + thread-safe) (0) | 2022.09.04 |
---|---|
객체지향 - 복사와 참조 (0) | 2022.07.08 |
객체지향 프로그래밍(OOP) - 속성 및 원칙 (0) | 2022.06.25 |
GoF - 싱글턴 패턴 Singleton Pattern (0) | 2021.05.05 |