Codeit_프로그래밍 언어를 분류하는 두 가지 기준_객체 지향
프로그래밍 언어를 분류하는 두 가지 기준_객체 지향
객체 지향 프로그래밍
프로그래밍 세계에서도 산업혁명과 같은 핵심적인 사건이 있다.
그것은 바로 객체 지향의 등장이다.
객체 지향은 프로그래밍에 대한 여러 접근 방식 중 하나이다.
하지만 객체 지향이 무조건 좋은 것은 아니다.
절차 지향이 속도가 더 빠른 경우 일부러 객체 지향을 안 쓰는 경우도 있다.
이렇게 전체를 각 부분으로 나눈뒤 각자 완성해 나가는 것을 top-down 방식이라고 한다.
top-down 방식으로 전체 프로그램이 실행되는 과정을 보면
예를 들어 로그인 기능 같은 경우에는 아이디, 비밀번호 같은 데이터들이 함수 파라미터로 넘어갔다가 리턴 되어서 다시 돌아온다. 피드올리기 같은 기능은 사진과 내용이 함수 파라미터로 넘어갔다가 다시 돌아오게 된다.
그래서 하나의 데이터가 여러 함수에서 사용되기도 한다.
top-down 방식
- 전체를 각 부분으로 나눈 뒤 각자 완성해나가는 것 즉 큰 걸 쪼개서 작은 걸로 나눈다는 의미 이다.
- 이 방식의 문제점은 전체를 합쳐야지만 제대로 동작하는지 알 수 있다는 것이다.
- 코드 전체가 완성되지 않으면 동작을 제대로 확인해볼 수 없다.
- 하나의 기능을 수정할 시 모든 코드를 점검해 봐야 한다. 즉 기능을 일부 수정하기가 어렵다.
이런 top-down 방식의 문제를 해결하기 위해 접근 방식을 바꿔보기로 한다.
큰 프로그램의 일을 나눌 때 이전 처럼 기능 즉 함수를 기준으로 나누는게 아니라
이전 처럼 모든 데이터가 한 곳에 모여서 기능이 다 얽혀 있는 게 아니라 함수,
그러니까 기능이랑 변수, 관련있는 데이터를 하나로 묶어서 좀 더 의미 있는 단위로 나누기로 했다.
이러한 방식으로 묶는게 객체(object) 라고 한다.
객체 라는 개념을 적용해서 프로그래밍을 한다고 해서 객체 지향 프로그래밍 이라고 부른다.
작은거 객체를 만들고 그것을 이용해서 큰 것들을 만드는 이 객체 지향 프로그래밍 방식은 Bottom-up 방식이라 할 수 있다.
기능이 아니라 객체를 기준으로 프로그램을 만든다면 어떻게 될까?
예를 들어 '사용자' 라는 객체를 만들고 사용자와 관련이 있는 데이터인 아이디, 비밀번호 등등 이런 데이터를 객체가 갖게 한다.
그리고 사용자의 기능으로는 로그인, 친구추가, 게시글 작성 등등 이 있다.
또 '게시글' 객체를 만들고 텍스트내용, 업로드 시간 등등 데이터를 갖고, 게시글 업로드 기능을 갖게 한다.
이런 방식으로 프로그램 객체를 여러 객체로 분류한다.
이렇게 코드를 분리하게 되면 데이터가 필요한 함수와 같이 묶여 있으니 이해도 더 직관적이고, 직접 한 부분을 만들면서 테스트나 실행하기도 더 편하다.
데이터의 변화가 있을때도, 하나의 객체만 확인하면 된다.
객체 지향 프로그래밍 의 장단점
장점
- 데이터나 기능에 변화가 생기더라도, 관련된 객체만 신경쓰면 되니, 프로그래밍하기 편하다.
- 조금 더 의미 있는 단위로 나누기 때문에, 코드를 이해하거나, 다른 프로그램에서 재사용하기에도 수월하다.
- 꼭 전체가 완성되지 않아도 일부 기능만 사용해볼 수도 있기 때문에 테스트에도 유리하다. 즉 유지 보수에 용이하다.
- 많은 데이터를 다루는 프로그램이나, 규모가 큰 프로젝트같은 경우에는 이 객체 지향의 장점이 부각된다.
단점
- 코드를 잘 나누고 설계하는 것이 어렵다. 즉 코드를 작성하기도 전에, 설계부터 많은 노력이 든다.
- 굳이 객체 지향적으로 만들 필요가 없는 경우들(예를 들어 규모가 작아서 일을 나누지 않고 혼자 바로 만들어버릴 수 있는 경우, 데이터를 크게 신경 쓰지 않아도 되는 경우, 이후에 바뀔 염려가 거의 없는 경우) 에는 이런 설계 과정 없이 그냥 바로 만들어버리는 게 더 빠르고 효율적이다.
- 사람이 이해하고 작성하기 편한 방식으로 코드를 나눠두다 보니, 컴퓨터가 이해하는데 시간이 걸려 실행하는 속도가 느려지거나, 저장 공간을 많이 차지한다.
- 극도로 빠른 실행 속도가 필요한 분야 혹은 저장 장치나 성능이 제한적인 기기(스마트워치, 스마트TV, 스마트 냉장고) 에서 돌아가는 프로그램을 만들 때는 객체 지향을 안 쓰는게 더 유리하다.
- 임베디드와 같은 특정 분야에는 부적합하다.