객체지향 프로그래밍 패러다임

sith-call.dev·2022년 1월 20일
0

객체지향

목록 보기
1/3

0. 배경지식 - 기술의 발전 방향

기술은 왜 발전하게 되는가? 어째서 사람들은 더 발전된 기술을 원하는가? 바로 편하기 때문이다. 그렇다. 기술은 사람을 더욱 편하게 하기 위해서 발전한다. 이러한 큰 흐름은 소프트웨어 세계에서도 발견된다.
컴퓨터는 최근 몇 십년 사이에 집약적으로 발전한 것 중에 하나이다. 이것의 발전 흐름을 보자면, 처음에는 하드웨어가 큰 발전을 하면서 기술적으로 소프트웨어를 앞서 나갔다. 그러나 하드웨어가 발전할수록 소프트웨어 기술에 대한 빈약함이 눈에 띄게 된다. 이를 계기로 소프트웨어 또한 발전하기 시작했다.
사실 이런 발전의 역사는 꽤나 길다면 길다. 그러나 여기선 객체지향이 나오게 된 맥락만을 짚어본다. 기계어가 나오고 고급언어들이 나왔음에도 사람들의 불편함을 아예 없애진 못했다. 왜냐하면 그때 당시의 프로그래밍 언어들은 컴퓨터의 관점에서 작성된 문법들이 존재했기 때문이다. 대표적인 것이 포인터이다. 그래서 아예 "사람 관점"에서 프로그래밍을 하고자 객체지향 프로그래밍 패러다임이 나오게 된 것이다. 중요한 것은 컴퓨터 관점에서 사람 관점으로 전환이다.

1. 사람의 관점이란?

앞서 말했듯이 객체지향 프로그래밍 패러다임이란 사람의 관점을 이용하여 문제를 해결하는 방법(패러다임)이다. 그렇다면 이제 그 사람의 관점이 무엇인지 자세하게 알아보자.

1-1 객체

객체란 이 세상 모든 것이며, 고유하게 존재하고, 상태를 가지며, 또한 행동할 수 있는 것이다. 왜냐하면 인간은 세상 속에 있는 물체를 인식할 때 먼저 그것의 상태와 행동의 관점에서 분석하고 또한 그것은 고유하게 존재하기 때문이다. 이 세상에 완전하게 동일한 물체는 존재하지 않는다.
그래서 object를 객체란 말 대신에 개체로 번역했어야 한다는 주장도 있다.

1-2 맥락

그러나 사람은 언제까지나 주관적이다. 그리고 주어진 상황 또한 상대적이다. 어떨 때는 A가 중요했다면, 어떨 때는 A가 중요하지 않는 상황이 항상 존재한다. 그렇기 때문에 맥락(Context)이 중요한 것이다. 우린 이제 객체를 바라볼 때 항상 맥락을 바탕으로 관찰할 것이기 때문이다.
이를 소프트웨어적인 용어로 말한다면, 어플리케이션 경계라고 한다. 즉, 은행에서 어플리케이션을 만들 때와 병원에서 어플리케이션을 만들 때 어떤 정보들을 우선할지 생각해본다면 쉽다.

1-3 클래스

이제 우린 클래스에 대해서 논할 수 있다. 먼저 객체는 고유하면서도 상태와 행동을 갖는다. 그런데 상태와 행동에 대한 해석은 주관적일 수 밖에 없다. 또한 끝도 없이 나열할 수도 있을 만큼 세상은 그리 단순하지 않다.
그래서 우린 객체의 정보 중에서 맥락에 맞는 것만을 남기고 나머지는 모두 버린다. 그렇다면, 여러 객체를 분석했을 때 남아 있는 정보 중에 공통 분모를 찾을 수 있을 것이다. 이런 공통점만을 추려서 그 객체를 분류하는 기준으로 삼는다. 이때 이 기준을 클래스라고 하는 것이다.
즉, 객체를 어플리케이션 경계에 맞도록 추상화하여 공통점만을 추출한 분류가 곧 클래스인 것이다.

참고서적

스프링 입문을 위한 자바 객체 지향의 원리와 이해

profile
Try again, Fail again, Fail better

0개의 댓글