객체지향 프로그래밍에 대한 나의 생각

이제 곧 취업준비도 해야하고, 많은 생각에 잠기게 되었다.
문득 객체지향에 관해서 아무것도 모르는 사람이 나에게 객체지향이 뭐냐고 물어보면 뭐라고 대답할지 생각해보았다.
그냥 객체를 지향한다고.....클래스를 쓴다고 말하는것은 너무 무성의 하다고 생각한다.
항상 느끼는거지만 정말 이것은 공부할수록 철학을 느낄수 있는 학문이다.
그럼 정리 들어간다. 

1.객체지향 ?
일단 객체지향프로그래밍이란 정말 말 그대로 객체를 지향한다는 것이다. 
객체지향언어라는것은 하나의 문법이 아닌 언어적 해석(사고방식)이라고 일단 말하고 싶다.
WINAPI사이트에서도 이렇게 분명히 얘기하고 있는데 많이들 간과하는 경향이 있다.
여기서 태클거는 사람이 있다면 한마디 하고싶다.
C++,JAVA,MFC가 대표적인 객체지향언어인데 이것이 같은 문법을 쓰고있나?
문법은 다르다. 같은 사고방식을 추구한다는 것이다.


2.객체지향을 왜 쓰는가?
그럼 객체지향프로그램은 왜 쓰는것일까?
그냥 C언어 같은 절차지향프로그래밍만으로 충분하지 않을까?
=>
C언어는 많은 장점이 있지만 문제점이 존재한다. C언어는 절차적프로그래밍이다. 절차적이 뭐냐면 위에서부터 순서대로 진행한다는 것이다. 순서대로 진행하다가 함수(모듈,프로시져)을 만나면 그것을 타고들어가는식으로 진행되는 언어이다. 절차적 프로그래밍의 단점은 개발에 시간이 오래걸리고, 한번 썻던 코드를 다시 재사용하기에 있어서 힘들다는 것이다. 재사용이 가능하다더라도 수정을 가해야되는 부분이 많고, 그부분을 찾기도 힘들다는 것이다. 이러한 이유로 인해서 예전에 소프트웨어 위기까지 왔었다.( 소프트웨어위기: 무어의 법칙으로 발전되는 하드웨어의 급속한 발전에 비해 소프트웨어발전이 더디어지는 현상을말한다.)
이러한 위기를 해결하기위한 하나의 방법으로 객체지향프로그래밍이란것이 나왔는데, 이것은 데이터들을 객체화 시켜 독립적으로 만들어 관리하는 것이다. 이렇게 되면 재활용성이 아주 높아서 한번 잘만들어놓으면 수정없이 다른 프로젝트에서 사용도 가능하고, 신뢰성도 확보된다. 그리고, 개발자가 사소한 실수를 한다더라도 객체는 이런 실수로부터 스스로 보호하기도 하고, 사용자들은 어떻게 동작하는지구조를 몰라도 인터페이스를 통해 쉽게 쓸수있다는 장점이 있다.
객체지향은 객체조립식 방식이기때문에 성능(속도,크기)이 절차식보다 조금 떨어지는 단점이있지만 요즘같은 시대에서는 상관없는 일이라고 한다~ ㅎㅎㅎㅎㅎ  속도 크기보다 유지,보수,편의성,신뢰성이 높은 객체지향 프로그래밍이 이러한 문제를 해결할수 있었다.
한가지 더 얘기해보자면 절차지향적 프로그래밍은 아래로 진행되는 하향식 프로그래밍이고,
객체지향은 상향식 프로그래밍이다. 상향식프로그래밍이란 위로 진행된다는 의미가 아니고, 부품들을 모아 상위의 프로그램을완성시키는 방식을 말함


3.객체지향 프로그래밍의 특징
객체지향 프로그래밍의 특징이라고 하면 학자에 따라 특징들이 달라지곤한다.
난 대표적인 특징들을 나열해봤다(winapi.com 을 참조하였다.)  

0)객체를 사용한다 : 객체의 특징들을 이용한다( 보통 특징으로 보지 않는데 나는 중요하게 보아 특징으로 넣었다 )
1)캡슐화 : 자료(Data)와 동작(Function)을 하나의 단위로 묶는 것
2)정보은폐 : 외부에서 사용하는 기능만 공개하고 나머지는 숨길 수 있는데 이를 정보 은폐
3)추상화 : 추상화란 현실 세계의 사물을 데이터적인 측면과 기능적인 측면을 통해서 정의하는것을 말하며 
                 객체의 효율적이고도 안전한 사용을 위해 인터페이스를 설계하는 것이며 캡슐화와 정보 은폐에                                의해 구현된다. 

4)상속 : 상속은 이미 만들어진 클래스를 파생시켜 새로운 클래스를 정의하는 기법이다
5)다형성 : 똑같은 호출이라도 상황에 따라, 호출하는 객체에 따라 다른 동작을 할 수 있는 능력을 다형성이라고 한                      다








4.객체의 특징

1)객체는 재사용 가능

2)부품의 안전성이 높아짐
3)확장성이 좋아짐
4)개발속도가 증가함 

 
하악 진짜 요약해서 쓰려고했는데, 객체지향은 정말 말해도 끝이 없는 분야라 이정도로 줄인다.
그나저나 면접에선 뭐라해야함?.........ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 

이 글을 공유하기

댓글

Designed by JB FACTORY