본문 바로가기
스터디 정리

객체 지향1

by 고공이 2021. 2. 22.

이제부터 제가 계속 공부하는 스터디에서 배웠던 것을 정리하려고 합니다. 계속 스터디원 분들이 공부한 것은 정리하는 습관을 남기라고 하셔서 이제부터라도 해보겠습니다. 시작이 반이라는 생각으로 시작해보겠습니다. 제가 하는 스터디는 주1회로 각자 데이터와 관련된 분야를 공부하고 계시고 있기 때문에 본인이 새로 알게 되거나 알았으면 좋겠다는 것을 간단하게 알려주는 형식으로 진행합니다.

 

그중, 제가 정리해볼 것은 바로 객체 지향입니다. 본 글은 코드잇 강의에서 공부한 것도 섞여있습니다.

 

객체 지향이란?

객체 지향은 프로그래밍에 대한 여러 접근 방식 중 하나입니다.

객체 지향을 워낙 많이 사용하기도 하고, 이제는 객체 지향을 모르면 개발자라고 할 수 없는 수준까지 이르렀다고 합니다. 그렇게 때문에 꽤 많은 프로그램 언어들이 아예 객체 지향에 맞춰서 등장하게 되었다고 합니다.

 

하지만 객체 지향이 무조건 정답은 아닙니다! 절차 지향이 속도가 더 빠른 경우도 있어서 어떤게 좋다고 말하기도 그렇고, 어떤 게 좋은지는 그때그때 다릅니다.

 

그럼 대체 객체 지향이 무엇이고, 언제 사용하면 좋을 지 한번 살펴보겠습니다.

 

예를 들어, 인*그램이라는 프로그램을 만들기 위해 여러 개발자들이 모였습니다. 인*그램은 기능이 많고 복잡하기 때문에 협업을 해야 합니다. 그렇다면 이 개발자들이 어떻게 협업을 해야 할까요?

 

먼저, 필요한 기능들을 나열한 후 각자에게 나눌 겁니다. 그럼 기능을 완성한 후 다시 하나로 합치면 인*그램이 완성될 것입니다. 이렇게 전체를 기능 별로 나눈 뒤 각자 완성해서 다시 하나로 합치는 것을 Top-down 형식이라고 합니다. 

 

출처: 코드잇

하지만 이렇게 작업할 경우 전체를 하나로 합쳐야지만 제대로 동작하는지 알 수 있다는 것입니다. 즉 하나라도 미완성일 경우 전체가 실행되지 않습니다. 하나의 코드를 수정할 때에도 모든 데이터는 연결되어있기 때문에 전체 코드를 점검해야 합니다. 정말 비효율적이죠. 특히 인*스타그램은 로그인, 피드, 댓글 등 많은 기능들이 있는데 하나의 실수 때문에 이러한 기능을 다 못쓰는 상황이 되면 정말 심각하게 되겠쬬?

 

그래서 각각 함수, 데이터 별로 나누는 게 아니라 관련있는 함수-데이터로 묶어서 작업하는 건 어떨까라는 생각을 하게 됩니다!

 

이러한 방식을 바로 객체, 영어로는 Object 라고 합니다. 

이 객체라는 개념을 적용해서 프로그래밍을 한다는 의미로 객체 지향 프로그래밍이라고 부르죠.

 

그렇다면 앞서 설명드렸던 인스타그램을 이 방식대로 만든다면 이제는 기능이 아니라 객체별로 프로그래밍할 것 입니다. 예를 들면, 사용자 객체를 만들고 그 안에 아이디 데이터, 비밀번호 데이터, 자기 소개 데이터를 객체가 갖게 합니다. 그리고 사용자의 기능으로는 로그인 기능, 친구 추가 기능, 게시글 작성 기능 등이 있겠습니다. 

 

출처: 코드잇

이렇게 객체 별로 코드를 나누게 되면 이해도 직관적이고, 직접 한 부분을 만들면서 test 하거나 실행하는 것도 편합니다. 데이터의 변화가 있을 때도 모든 변수, 모든 코드를 확인해보는 게 아니라 하나의 객체만 확인하면 됩니다.

 

그렇다면 이러한 방식은 뭐라고 부를 수 있을까요? 바로 Bottom-up 방식이라고 부를 수 있겠죠.

 

객체 지향의 장단점 요약

장점

- 유지 보수에 용이하다

- 가독성이 높다.

- 재사용하기 좋다.

- 테스트가 쉽니다.

 

단점

- 설계가 어렵다.

- 작은 규모의 프로그램에서는 객체 지향으로 작성하는 것이 더 오래 걸릴 수 있다.

- 극도로 빠르거나 주어진 자원을 극도로 활용해야 하는 경우는 좋지 않다.

- 임베디드와 같은 특정 분야에는 부적합하다.

'스터디 정리' 카테고리의 다른 글

혼자 공부하는 SQL 2주차  (0) 2022.07.14
혼자 공부하는 SQL 1주차  (0) 2022.07.05
그래프 데이터베이스(Graph Database)  (0) 2021.04.22
객체지향2  (1) 2021.02.24
인공지능의 기초  (0) 2020.10.29

댓글