티스토리 뷰

객체 지향 프로그래밍의 개념 (Object Oriented Programming)  < OOP, 객체지향 vs 절차지향, 면접 빈출, 코딩 테스트, 코딩 인터뷰>


프로그래밍을 해보신분이거나 관심이 있으신 분들은 "객체 지향 프로그래밍" 이야기는 많이 들어보셨을겁니다.


그러나 당장 뭔지 설명해보라고 하면 정리하기가 어렵죠?!


이번 포스팅을 통해 누가 물어봐도 바로 대답할 수 있도록 개념을 쉽고 빠르게 정리해드리겠습니다!





"객체 지향 프로그래밍"프로그램을 어떻게 설계해야 하는지에 대한 방법론이며,


효율적으로 프로그램을 짜기 위해 코드를 객체(Object)라는 단위로 나누고,


별도 개발 후 레고 블록 조립하듯 코딩하는 방법론입니다.


아직 잘 모르시겠다고요?


쉽게 이해하기 위해 다른 방법론인 "절차 지향 프로그래밍"과 비교해보겠습니다.


초기에 모든 프로그래밍 방법은 "절차 지향 프로그래밍"으로부터 시작되었습니다.


절차지향 프로그래밍은 순서가 중요하여 프로그래밍을 순서대로 해야했습니다.




예를 들어 "자동차"라는 프로그램을 만든다고 가정을 해봅시다.


자동차자동차 프로그램을 만들어보자


자동차를 만들기 위해서는 엔진, 차체, 핸들, 바퀴, 의자 등이 필요하다고 할 때,


절차 지향적 관점으로 본다면 자동차를 만들기 위해서는 처음 부터 순서대로 만들어가야 합니다.


엔진 -> 차체 -> 핸들 -> 바퀴 -> 의자 -> 등등...


이런 식으로 만들어가야하며, 서로 분리도 안되고 순서가 틀려도 안되며,


하나가 잘못되면 전체가 고장나게 되는 구조입니다.


그렇기에 부품이 많아지고 복잡해지면,


순서도로 나타내는 것이 불가능할 정도로 꼬인 "스파게티 코드"가 됩니다.


즉, 전부 연결되어있으니 어디에 사용되는 코드고 어디까지 이어지고,


어디로 연결되어 있느냐 등 파악이 어려워 가독성이 떨어집니다.



스파게티코드복잡하게 얽힌 코드를 "스파게티코드"라고 한다.



따라서 선조 프로그래머들은 이를 해결하기 위한 대책을 생각합니다.


"기능별로 나눠서 따로 개발하고 합치면 편하지 않을까?"


그렇게 등장한 방법이 "객체 지향 프로그래밍"입니다.

객체 지향적 관점으로 본다면 자동차를 기능별로 나눠,


"객체 (Object)"에 담아 부품을 따로 따로 제작을 하게 됩니다.

그 후, 마치 레고 블록을 조립하듯 기능을 하나씩 조립하여 프로그램을 완성합니다.



레고자동차한번 제작한 블록은 다른 자동차를 만들때에도 사용할 수 있다.


핸들 따로, 바퀴 따로, 엔진 따로 더 전문적이고 효율적으로 만들 수 있고 코드를 구분하기도 쉽습니다.


후에 각 부품을 결합하여 자동차라는 프로그램을 완성시킬 수 있습니다.


또한, 부품들이 결합되어 움직이다 어느 하나가 고장이 나더라도 전체 부품에 영향을 미치지는 않습니다. 


고장난 부품만 고쳐주거나, 필요하면 다른 것으로 교체할 수 있고 더 좋은 것으로 바꿀수도 있습니다.


심지어 한번 잘 만들어둔 부품은 다른 자동차 제작에도 사용될 수 있죠.


이것이 바로 "객체 지향 프로그래밍"입니다.


즉, 프로그램을 수많은 "객체"라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식입니다.


어떤가요? 조금 이해가 되시나요?



다음 포스팅에서는 좀 더 구체적인 사례와 코드를 바탕으로,


"객체 지향 프로그램의 핵심 특징 4가지"에 대해 알아보겠습니다.


객체 지향 프로그래밍 특징 4가지

댓글